网站大量收购独家精品文档,联系QQ:2885784924

创建型模式讲述.doc

  1. 1、本文档共10页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
创建型模式 创建型模式抽象了实例化过程。它们帮助一个系统独立于如何创建、组合和表示它的那些对象。一个类创建型模式使用继承改变被实例化的类,而一个对象创建型模式将实例化委托给另一个对象。 一 它们都将关于该系统使用哪些具体的类的信息封装起来。 二 它们隐藏了这些类的实例是如何被创建和放在一起的。整个系统关于这些对象所知道方法的是由抽象类所定义的接口。 工厂模式 专门负责将大量有共同接口的类实例化。可以动态决定将哪一个类实例化,不必事先知道每次要实例化哪一个类。 工厂模式有以下几种形态: 简单工厂(Simple Factory)模式,工厂方法(Factory Method)模式,抽象工厂(Abstract Factory)模式 设计模式(Design Pattern)需要的四个要素: ? 模式名称(pattern name)一个助记名, ? 问题(problem) 描述了应该在何时使用模式。 ? 解决方案(solution) 描述了设计的组成成分,它们之间的相互关系及各自的职责和协作方式。 ? 效果(consequences) 描述了模式应用的效果及使用模式应权衡的问题。 简单工厂模式 ? 简单工厂模式是类的创建模式。一个具体工厂类通过条件语句创建不同产品,根据传入的参量动态决定创建出哪一种产品类的实例 角色(参与者) 工厂类(Creator)角色:由客户端的直接调用,创建产品对象,往往由一个具体类实现。 抽象产品(Product)角色:由工厂方法模式所创建的对象的父类或它们共同拥有的接口。可以用一个接口或者抽象类实现。 具体产品(Concrete Product)角色:工厂方法模式所创建的任何对象都是这个角色的实例,由一个具体类实现。 简单工厂模式优缺点 实现了对责任的分割。模式的核心是工厂类。这个类含有必要的判断逻辑。而客户端仅仅负责“消费”产品,免除直接创建产品对象的责任。 缺点: 1、工厂类集中了所有的产品创建逻辑(God Class),其运行状态正常至关重要 2、工厂类负责判断在什么时候创建哪种产品。判断逻辑混合在一起,使得系统在将来进行功能扩展时较为困难。 3、由于简单工厂模式使用静态方法作为工厂方法,而静态方法无法由子类继承,因此工厂角色无法形成基于继承的等级结构。 工厂方法模式 名称:工厂方法模式是类的创建模式,又叫做虚拟构造子(Virtual Constructor)模式或者多态性工厂(Polymorphic Factory)模式。 问题:谁有责任创建一些特殊考虑的对象?比如说有复杂的创建逻辑,为了更好的内聚性而希望分离创建职责。 解决方案:创建一个称为工厂(Factory)的纯虚构对象来处理这种创建。 适用性 ·当一个类不知道它所必须创建的对象的类的时候。 ·当一个类希望由它的子类来指定它所创建的对象的时候。 ·当类将创建对象的职责委托给多个子类中的某一个,并且你希望将哪一个子类是代理者这一信息局部化的时候。 参与者 抽象产品Product(Operation):定义工厂方法所创建的对象的接口。 具体产品ConcreteProduct(OperationAdd等):实现Product接口(GetResult)。抽象工厂Creator(IFactory):1)声明工厂方法,该方法返回一个Product类型的对象。Creator也可以定义一个工厂方法的缺省实现,它返回一个缺省的ConcreteProduct对象。2)可以调用工厂方法以创建一个Product对象。 具体工厂ConcreteCreator(AddFactory等):重定义工厂方法以返回一个ConcreteProduct实例。 抽象工厂模式 适用性 ? 一个系统要独立于它的产品的创建、组合和表示时。 ? 一个系统要由多个产品系列中的一个来配置时。 ? 当要强调一系列相关的产品对象的设计以便进行联合使用时。 ? 当提供一个产品类库,而只想显示它们的接口而不是实现时。 参与者 抽象工厂AbstractFactory:声明一个创建抽象产品对象的操作接口。 具体工厂ConcreteCreator(CarFactory等):实现创建具体产品对象的操作。 抽象产品Product(Auto):为一类产品对象声明一个接口。 具体产品ConcreteProduct(Car等):定义一个将被相应的具体工厂创建的产品对象实现AbstractProduct接口。 客户端Client:仅使用由AbstractFactory和AbstractProduct类声明的接口 协作:通常在运行时刻创建一个ConcreteFactroy类的实例。这一具体的工厂创建具有特定实现的产品对象。为创建不同的产品对象,客户应使用不同的具体工厂

文档评论(0)

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

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

1亿VIP精品文档

相关文档