- 1、本文档共20页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
第七创建型模式抽象工厂模式
第七章 创建型模式 抽象工厂模式(ABSTRACT FACTORY) 生成器模式(BUILDER) 工厂模式(factory method) 原型模式(PROTOTYPE) 单件模式(SINGLETON) 迷宫例子见文档 创建型模式 创建型模式抽象了实例化过程。它们帮助一个系统独立于如何创建、组合和表示它的那些对象。 一个类创建型模式使用继承改变被实例化的类,而一个对象创建型模式将实例化委托给另一个对象。 创建型模式 随着系统演化得越来越依赖于对象复合而不是类继承,创建型模式变得更为重要。 当这种情况发生时,重心从对一组固定行为的硬编码(hard-coding)转移为定义一个较小的基本行为集,这些行为可以被组合成任意数目的更复杂的行为。这样创建有特定行为的对象要求的不仅仅是实例化一个类。 创建型模式 在这些模式中有两个不断出现的主旋律: 它们都将关于该系统使用哪些具体的类的信息封装起来。 它们隐藏了这些类的实例是如何被创建和放在一起的。整个系统关于这些对象所知道的是由抽象类所定义的接口。因此,创建型模式在什么被创建, 谁创建它,它是怎样被创建的,以及何时创建这些方面给予你很大的灵活性。 它们允许用结构和功能差别很大的“产品”对象配置一个系统。配置可以是静态的(即在编译时指定),也可以是动态的(在运行时)。 7.1 抽象工厂模式 意图 : 提供一个创建一系列相关或相互依赖对象的接口,而不需指定他们具体的类。 别名 : Kit 适用性 : 1.一个系统不应当依赖于产品类实例如何被创建、组合和表达的细节,这对于所有形态的工厂模式都是重要的。 2、这个系统的产品有多于一个产品族,而系统只消费其中某一个族的产品(上面这一条叫做抽象工厂模式的原始用意。) 3、同属于同一个产品族的产品是在一起使用的,这一约束必须在系统的设计中体现出来。 4、系统提供一个产品类的库,所有的产品以同样的接口实现,从而使客户端不依赖于实现。 结构 : 参与者 : 抽象工厂(Abstract Factory)角色:担任这个角色的是工厂方法模式的核心,它是与应用系统商业逻辑无关的。 具体工厂(Concrete Factory)角色:这个角色直接在客户端的调用下创建产品的实例。这个角色含有选择合适的产品对象的逻辑,而这个逻辑是与应用系统的商业逻辑紧密相关的。 抽象产品(Abstract Product)角色:担任这个角色的类是工厂方法模式所创建的对象的父类,或它们共同拥有的接口。 具体产品(Concrete Product)角色:抽象工厂模式所创建的任何产品对象都是某一个具体产品类的实例。这是客户端最终需要的东西,其内部一定充满了应用系统的商业逻辑。 Cliet :仅使用由Abstract Factory和Abstract Product类声明的接口。 模式原型代码 见文档 协作 : 通常在运行时刻创建一个ConcreteFactory 类的实例。这一具体的工厂创建具有特定实现的产品对象。为创建不同的产品对象,客户应使用不同的具体工厂。 AbstractFactory将产品对象的创建延迟到它的ConcreteFactory子类。 优点和缺点 (效果) 它分离了具体的类。AbstractFactory模式帮助你控制一个应用创建的对象的类。因为一个工厂封装创建产品对象的责任和过程。它将客户与类的实现分离。客户通过它们的抽象接口操纵实例。产品的类名也在具体工厂的实现中被分离。它们不出现在客户代码中。 它使得易于交换产品系列。一个具体工厂类在一个应用中仅出现一次。这使得改变一个应用的具体工厂变得容易。只需改变具体的工厂即可使用不同的产品配置。因为一个抽象工厂创建了一个完整的产品系列,所以整个产品系列会立刻改变。 优点和缺点:(续) 它有利于产品的一致性。当一个系列中的产品对象被设计成一起工作时,一个应用一次只能使用同一个系列中的对象。 难以支持新种类的产品。AbstractFactory接口确定了可以被创建的产品集合。支持新种类的产品就需要扩展该工厂的接口,这涉及到AbstractFactory类及所有子类的改变。 实现 : 1. 将工厂作为一个单件。 2.创建产品。 3. 定义可扩展的工厂。 代码示例 :见文档 相关模式 : AbstractFactory类通常用工厂方法(Factory Method)实现,但它们也可以用Prototype实现。 一个具体工厂通常是一个单件Singleton。 人有了知识,就会具备各种分析能力, 明辨是非的能力。 所以我们要勤恳读书,广泛阅读, 古人说“书中自有黄金屋。 ”通过阅读科技书籍,我们能丰富知识, 培养逻辑思维能力; 通过阅读文学作品,我们能提高文学鉴赏水平, 培养文学情趣; 通过阅读报刊,我
文档评论(0)