设计模式 - 工厂方法
定义
Define an interface for creating an object, but let subclasses decide which class to instantiate.
Factory Method lets a class defer instantiation to subclasses.
Also known as: Virtual Constructor
UML

- 类接口
- 具体类
- 工厂基类,创建对象的接口。可在调用者的方法中传入具体工厂进行初始化。
- 具体工厂,子类实例化。
1、3是稳定的,2、4是变化的。
实例
多地日志记录,不同对象的分割处理
在编写代码时,无法预知对象确切类别及其依赖关系时(延迟);
希望用户能扩展软件库或框架的内部组件时;
希望复用现有对象来节省系统资源(数据库连接、文件系统、网络资源等),而不是每次都重新创建对象;
比较
此模式绕开new,来避免对象创建(new)过程中所导致的紧耦合(依赖具体类),保持对象创建的稳定。它是接口抽象之后的第一步工作。
开发初期都会使用此模式,解决“单个对象”的需求变化(简单,可通过子类进行定制),随后演化为使用 抽象工厂、原型模式、生成器等更灵活、更复杂的模式。
| 比较 | 工厂方法 | 备注 | 
|---|---|---|
| 抽象工厂 | 一组工厂方法可扩展为抽象工厂 | 抽象工厂通常基于一组工厂方法 | 
| 迭代器 | 同时使用工厂方法和迭代器来让子类集合返回不同类型的迭代器,并使得迭代器与集合相匹配 | |
| 原型 | 工厂方法基于继承,但不需要初始化步骤 | 原型不基于继承,但需要对被复制对象进行复杂的初始化 | 
| 模板方法 | 工厂方法是模板方法的一种特殊形式,可以作为一个大型模板方法中的一个步骤 | |

 
                
            
         浙公网安备 33010602011771号
浙公网安备 33010602011771号