意图:
定义一个用于创建对象的接口,让子类决定实例化哪一个类。Factory Method使一个类的实例化延迟到其子类。这样,核心工厂类不再负责产品的创建,仅负责为具体工厂类提供必须实现的接口,这样的好处是可以使系统在不修改工厂角色情况下引入新的产品(新增一个具体工厂类即可)
解决的问题:
应用类不能预测那个实例子类被实例化,仅知道一个新的对象何时应被创建。该模式把处理延迟到子类,由子类决定实例化哪个类。
适用性:
当一个类不清楚它所必须创建的对象的类的时候
一个类希望由它的子类来指定它所创建的对象的时候。
UML描述:
p.s :右边第一个note表示CreateProduct的实现
实现相关:
1) 使用具体工厂(抽象工厂可作为抽象类,也可能定义缺省方法)
2) 可以使用参数化工厂方法来使得工厂方法可以创建多种产品。工厂方法采用一个标识来指定要被创建的对象种类的参数(如枚举类型的参数)。可以直接由Creator创建产品,若需要扩充的话再生成子类(覆盖产品的创建方法,增加需要的产品,而把默认的处理交给基类),如
typedef enum productID{ PRODUCTA, PRODUCTB } ProductID;
Productor * Create::Creator (ProductId id)
{
switch(id) :
case PRODUCTA: return new ProductA; break;
…
}