抽象工厂模式资料教材.pptVIP

  1. 1、本文档共38页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  5. 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  6. 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  7. 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  8. 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
软件设计模式 第二讲 抽象工厂模式 抽象工厂模式 名称:抽象工厂模式(Abstract Factory Pattern)或Kit模式 意图:提供一系列相关或相互依赖对象的接口而无需指定他们具体的类。 核心:抽象工厂模式(Abstract Factory Pattern)提供了一个接口,用于创建相关或者依赖对象的家族,而不需要指定具体实现类。抽象工厂模式允许客户使用抽象接口来创建一组相关的产品,客户类和工厂类分开,客户需要任何产品的时候,只需要向工厂请求即可,客户无须修改就可以获得新产品。 抽象工厂模式 抽象工厂模式的动机 考虑一个支持多种视感(look- and- feel)表准的用户界面工具包,例如Motif和Presentation Manager. 不同的视感风格为滚动条、窗口和按钮等用户界面“窗口组件”定义不同的外观和行为。 为保证视感风格标准间的可移植性,一个应用不应该为一个特定的视感外观硬编码它的窗口组建。在整个应用中实例化特定视感风格的窗口组件类将使得以后很难改变视感风格。 抽象工厂模式的动机 为解决这一问题,定义一个抽象的WidgetFactory类,这个类声明了一个用来创建每一个类基本窗口组件的接口. 每一类窗口组件都有一个抽象类,而具体子类则实现了窗口组件的特定视感风格。对于一个抽象窗口组件类,WidgetFactory接口都有一个返回新窗口组件对象的操作。 客户调用这些操作以获得窗口组件实例,但客户并不知道他们正在使用的是哪些具体类。这样客户就不依赖于一般的视感风格。 抽象工厂模式的作用 抽象工厂模式的类图 抽象工厂模式的类图 抽象工厂模式的时序图 抽象工厂模式的实例一 抽象工厂模式的实例二 大陆生态系统: 已知动物世界中各个大陆的动物是不同的,例如非洲有狮子和角马,美洲有狼和野牛。 动物可划分为食草和食肉动物,狮子和美洲狼属于食肉动物,而野牛和角马属于食草动物。 狮子捕食角马,美洲狼捕食野牛。 抽象工厂模式的实例二 抽象工厂模式的实例三 电脑生产: IBM, Dell都是著名的计算机生产厂家,他们采用的主板、硬盘和CPU是不同的,但主板、硬盘和CPU 之间一定要兼容。 现硬盘有Maxtor和WestDigit两种,CPU有AMD和Intel, 主板有MSI865PE 和MSIK7N2G两种。 IBM采用Intel的CPU和WestDigit的硬盘,Dell采用AMD的CPU和Maxtor的硬盘。 抽象工厂模式的实例三 抽象工厂模式的实例三 抽象工厂模式的实例三 抽象工厂模式的实例三 抽象工厂模式的实例三 抽象工厂模式的实例三 抽象工厂模式的实例三 抽象工厂模式的实例四 综合案例(肯德基): 故事中的角色 肯德基店—生产食物的工厂 食物(麻辣鸡腿汉堡、奥尔良烤鸡翅、薯条、可乐)—工厂生产的产品 爸爸、儿子—客户 抽象工厂模式的实例四 综合案例(肯德基): 抽象化分析 “开-闭”原则-抽象 抽象最大话- “依赖倒置” 抽象工厂模式的实例四 抽象工厂模式的实例四 package com.demo.factory.model; /** * *食品基类 */ public abstract class AbstractBaseFood { // 类别 protected String kind; // 数量 protected int num; // 价格 protected float price; // 合计 public float totalPrice() { return this.num * this.price; } } 抽象工厂模式的实例四 package com.demo.factory.model; /** * 抽象食物接口 * */ public interface IFood { /** * 打印输出食物信息 */ void printMesage(); } 抽象工厂模式的实例四 package com.demo.factory.model; /** * 汉堡类 * */ public abstract class Hamburg extends AbstractBaseFood implements IFood { public void printMesage() { System.out.println(-- + this.kind + 风味汉堡, \t 单价: + this.price + \t 数量: + this.num + , \t 合计: + this.totalPrice()); } } 抽象工厂模式的实例四 package com.demo.factory.model.kfc; import com.demo.factory.model.Ham

您可能关注的文档

文档评论(0)

my18 + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档