浅析设计模式之工厂方法模式及一篇相关翻译

来源:互联网 发布:魔方数据恢复 编辑:程序博客网 时间:2024/05/17 03:57

浅析设计模式之工厂模式及一篇相关翻译

翻译资料来源: Factory Method Design Pattern

工厂方法设计模式

目的

  • 为创建对象的方法定义接口,但是让子类决定要实例化的类。工厂方法将一个类的实例化交给子类去施行
  • 定义“虚拟”的构造器
  • 操作符’new’被认为不利于代码复用

问题

  • 框架需要标准化一系列应用的架构模型,但是却允许单一的应用程序定义它们自己的对象域,并且提供这些对象的实例

讨论

  • 工厂方法就像执行算法提供对象的模板方法。一个父类定义了所有方法标准与泛型(使用占位符),然后继承并实现方法的细节,提供给用户使用
  • 工厂方法使软件设计更加自定义,并且相对起来只复杂一点点。其它的设计模式需要新的类,然而工厂方法只需要新的操作
  • 程序员们经常使用工厂方法作为创造对象的标准方法,但是以下情况下它并不适合使用:这个类被实例化后不再需要改变了,或者这个类的子类可以将它替代掉
  • 工厂方法模式与抽象方法模式相似,但它并不强调工厂家族
  • 工厂方法经常被各种设计框架使用,然后被使用框架的用户执行

结构

  • 工厂方法的实现大部分与抽象工厂重合。
  • 这里写图片描述
  • 工厂方法比较广泛的定义是:一个返回所需对象的静态方法。但是与构造器不同,实际返回的是子类的对象实例;已存在的对象可以被重用而不是重新创建一个对象;工厂方法有着更多的具有描述性的名字。
  • 这里写图片描述
  • client被完全的从类的执行细节中解耦,多态转换变成可能
  • 这里写图片描述

示例

  • 工厂方法定义了创造对象的接口,但是让子类决定他那些类需要被实例化。模型打印与这个模式相似。橡皮玩具的基础设施处理橡皮模型粉末,并且将粉末注入模型获取想要的形状。玩具类由模型决定
  • 这里写图片描述

清单

  • 如果你遇到需要多态的继承结构,尝试利用多态定义一个静态的工厂方法。
  • 设计传入工厂方法的参数。
  • 考虑使所有的构造器的修饰符为private或protected

首要原则

  • 抽象工厂类通常需要实现工厂方法,但是它们都可以通过属性实现
  • 工厂方法通常被称为嵌入模板方法
  • 工厂方法:通过继承实现 属性:通过代理实现
  • 通常,设计从工厂方法开始(更简单,更灵活,子类剧增),慢慢转化成了抽象工厂,Prototype或者Builder(更复杂,更灵活)。它们的选择根据程序员的实际需求选择
  • Prototype不需要继承的子类,但是它需要初始化的操作。工厂方法需要继承的子类,但是不需要初始化的操作
  • 工厂方法的好处在于它可以返回同样的实例多次,或者可以返回它的子类而不是这个类的对象
  • 一些工厂方法倡导构造器需要private或者protected。它产生新的对象或者回收旧的对象与其它类无关
  • ‘new’修饰符被认为对代码复用有害。请求一个对象与创造一个对象有着差别。‘new’修饰符通常创建一个对象,工厂方法强制封装,并且返回一个对象而不用创建

工厂模式的个人见解

  • 工厂方法封装了返回一个对象的方法,返回的对象由程序员通过参数传入进行判断。

实例

public static <T extends Product> T getProduct(Class<T> clz){    return (Product)Class.forName(clz.getName()).newInstance();}
  • 当工厂的类增加时,就需要将工厂方法模式转换为抽象工厂模式
  • 抽象工厂需要两个父类,一个工厂父类,一个产品父类
  • 工厂方法需要一个产品父类
0 0
原创粉丝点击