浅析设计模式之工厂方法模式及一篇相关翻译
来源:互联网 发布:魔方数据恢复 编辑:程序博客网 时间: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
- 浅析设计模式之工厂方法模式及一篇相关翻译
- 浅析设计模式之工厂方法
- 设计模式之装饰模式、工厂方法模式、抽象工厂模式浅析
- 设计模式第一篇 工厂方法模式
- 浅析设计模式之抽象工厂模式
- 大话设计模式之简单工厂模式、抽象工厂模式及工厂方法模式的比较
- 大话设计模式之简单工厂模式、抽象工厂模式及工厂方法模式的比较
- 设计模式之工厂方法模式及代码示例
- 工厂方法模式浅析
- 设计模式之工厂方法
- 设计模式之工厂方法
- 设计模式 之 工厂方法
- 设计模式 之 工厂方法
- 设计模式之工厂方法
- 设计模式之工厂方法
- 设计模式之工厂方法
- 设计模式之工厂方法
- 设计模式之工厂方法
- java 中的 final 变量
- poj Round Numbers 3252(数位dp进阶)
- php redis brpop提示异常
- Exception occurred during processing request: null
- WordPress 建立数据库连接时出错解决方法
- 浅析设计模式之工厂方法模式及一篇相关翻译
- spark1.3.0 on yarn 构建(hive0.12.0)
- liunx环境下程序的编译和链接
- Memcache技术初步认识和基本的CRUD操作
- 优化数据页面(5)——加大字号突出标题行
- Ubuntu下使用解压版Tomcat7
- java socket编程实例
- Logistic regression---原理部分
- C++ 仿函数