1 简单工厂
就是建立一个工厂类,对实现了同一接口的一些类进行实例的创建。
简单工厂的实现比较容易,这里就不再具体分析。
2 工厂方法模式(Factory Method)
工厂方法模式是简单工厂的扩张,工厂方法模式针对的是一个产品等级结构。其定义了一个用于创建对象的接口,让子类决定实例化哪一个类。
Factory Method的优点是:
- 使一个类的实例化延迟到其子类.
- 使新增一个新对象,只需添加一套对应的工厂和产品就可以了,几乎不需要修改原代码。
首先给出其类图如下:
适用性:
- 当一个类不知道它所必须创建的对象的类的时候。
- 当一个类希望由它的子类来指定它所创建的对象的时候。
- 当类将创建对象的职责委托给多个帮助子类中的某一个,并且你希望将哪一个帮助子类是代理者这一信息局部化的时候。
3 抽象工厂(Abstract Factory)
当每个抽象产品都有多于一个的具体子类的时候,工厂角色怎么知道实例化哪一个子类呢?比如每个抽象产品角色都有两个具体产品。这里就需要抽象工厂了。
抽象工厂模式针对的是多个产品等级结构。其提供了一个创建一系列相关或相互依赖对象的接口,而无需指定它们具体的类。 其类图如下:
抽象工厂的使用场景:
- 一个系统要独立于它的产品的创建、组合和表示时。
- 一个系统要由多个产品系列中的一个来配置时。
- 当需要强调一系列相关的产品对象的设计以便进行联合使用时。
- 当需要提供一个产品类库,而只想显示它们的接口而不是实现时。
关于工厂方法相关内容的源码请查看设计模式