第4章抽象工厂模式.ppt

  1. 1、本文档共52页,可阅读全部内容。
  2. 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
第4章抽象工厂模式

每个模式都是针对一定问题的解决方案。 在学习抽象工厂具体实例之前,应该明白两个重要的概念:产品族和产品等级。,示意图如下: * 上面的实现中,并没有维护这种关联关系,CPU和主板是由客户随意选择的 * 请注意,这里要解决的问题和工厂方法模式或简单工厂解决的问题是有很大不同的,工厂方法模式或简单工厂关注的是单个产品对象的创建,比如创建CPU的工厂方法,它就只关心如何创建CPU的对象,而创建主板的工厂方法,就只关心如何创建主板对象。 ?????? 这里要解决的问题是,要创建一系列的产品对象,而且这一系列对象是构建新的对象所需要的组成部分,也就是这一系列被创建的对象相互之间是有约束的。 * 解决这个问题的一个解决方案就是抽象工厂模式。在这个模式里面,会定义一个抽象工厂,在里面虚拟的创建客户端需要的这一系列对象,所谓虚拟的就是定义创建 这些对象的抽象方法,并不去真的实现,然后由具体的抽象工厂的子类来提供这一系列对象的创建。这样一来可以为同一个抽象工厂提供很多不同的实现,那么创建 的这一系列对象也就不一样了,也就是说,抽象工厂在这里起到一个约束的作用,并提供所有子类的一个统一外观,来让客户端使用。 * 提供一个创建一系列相关或相互依赖对象的接口,而无需指定他们具体的类 每个模式都是针对一定问题的解决方案。 在学习抽象工厂具体实例之前,应该明白两个重要的概念:产品族和产品等级。,示意图如下: * 每个模式都是针对一定问题的解决方案。 在学习抽象工厂具体实例之前,应该明白两个重要的概念:产品族和产品等级。,示意图如下: * 当有多个抽象角色时,抽象工厂模式可以向客户端提供一个接口,使得客户端在不必指定产品具体的情况下,创建多个产品族中的产品对象。 * AbstractFactory: ?????? 抽象工厂,定义创建一系列产品对象的操作接口。 ConcreteFactory: ?????? 具体的工厂,实现抽象工厂定义的方法,具体实现一系列产品对象的创建。 AbstractProduct: ?????? 定义一类产品对象的接口。 ConcreteProduct: ?????? 具体的产品实现对象,通常在具体工厂里面,会选择具体的产品实现对象,来创建符合抽象工厂定义的方法返回的产品类型的对象。 Client: ?????? 客户端,主要使用抽象工厂来获取一系列所需要的产品对象,然后面向这些产品对象的接口编程,以实现需要的功能。 * 如同前面的示例,定义了一个抽象工厂AbstractFactory,在里面定义了创建CPU和主板对象的接口的方法,但是在抽象工厂里面,并没有指定具体的CPU和主板的实现,也就是无须指定它们具体的实现类。 CPU和主板是相关的对象,是构建电脑的一系列相关配件,这个抽象工厂就相当于一个装机方案,客户选择装机方案的时候,一选就是一套,CPU和主板是确定好的,不让客户分开选择,这就避免了出现不匹配的错误。 * 快餐店经常良好,逐渐发展壮大,为了适合不同地方人的饮食习惯,创建了两大系列(相当于产品族)快餐,北方系列和南方系列。每个系列分别由一个大厨掌勺。 * * 现在有一种相对灵活,但是不太安全的改进方式来解决这个问题,思路如下:抽象工厂里面不需要定义那么多方法,定义一个方法就可以了,给这个方法设置 一个参数,通过这个参数来判断具体创建什么产品对象;由于只有一个方法,在返回类型上就不能是具体的某个产品类型了,只能是所有的产品对象都继承或者实现 的这么一个类型,比如让所有的产品都实现某个接口,或者干脆使用Object类型。 还是看看代码来体会一下,把前面那个示例改造成可扩展的工厂实现。 /**? ?*?可扩展的抽象工厂的接口? ?*/?? public?interface?AbstractFactory?{?? ????/**? ?????*?一个通用的创建产品对象的方法,为了简单,直接返回Object? ?????*?也可以为所有被创建的产品定义一个公共的接口? ?????*?@param?type?具体创建的产品类型标识? ?????*?@return?创建出的产品对象? ?????*/?? ????public?Object?createProduct(int?type);?? }?? Abstract Factory模式Factory Method模式的更高层次的抽象,也更最具一般性。可以把Factory Method模式看作是Abstract Factory模式的一种特殊情况 Abstract Factory模式通过抽象工厂为客户(调用者)生成多类产品,抽象工厂负责管理子工厂对象,子工厂负责生成某一类具体的产品对象。 也就是说,Abstract Factory模式中,跟客户打交

文档评论(0)

liudao + 关注
实名认证
内容提供者

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

1亿VIP精品文档

相关文档