创建型模式:Factory Method 工厂方法模式
目录

工厂方法模式用于封装对象的创建。 这里我们把经常代码中需要变化的部分,即创建什么类型的对象这部分, 独立出来使用一个新类来创建对象,这个新类就是工厂类。 该模式通过工厂类(或子类)来决定创建的对象是什么,来达到封装对象创建过程的目的。

工厂类(Creator)提供创建方法的接口,也称工厂方法。 工厂类子类(ConcreteCreator)实现工厂方法,定义对象(Product)创建过程。

class Creator {
public:
virtual Product* create(ProductId) = 0;    // 改变的部分

void workerFunc(ProductId pid) {           // 不变的部分
Product *p = create(pid);
}
};

class ConcreteCreator : public Creator{
};

Product* ConcreteCreator::create(ProductId id)   // 实现改变的部分
{
if (id == MINE) return new MyProduct;
if (id == YOURS) return new YourProduct;
...
}

工厂方法模式定义了一个创建对象的接口,但由子类决定要实例化的类是哪一个。 工厂方法让类把实例化推迟到子类。

不使用子类继承,直接在工厂类(Creator)中实现工厂方法的模式也称为简单工厂。 工厂方法比简单工厂更具弹性。

静态工厂:不需要实例化,但是不能通过继承改变创建方法的行为。

依赖倒置原则:要依赖抽象,不要依赖具体类。

发表评论