创建型模式1-工厂方法
2018-04-16 本文已影响0人
sunblog
创建型模式1-工厂方法
创建型模式简
创建型模式主要有5个:
- 工厂方法(factory method)
- 抽象工厂(abstract factory)
- 单例模式(singleton)
- 构造者模式(builder)
- 原型模式(prototype)
下面分别描述这几种模式。
工厂方法(factory method)
意图
定义一个用于创建对象的接口,让子类决定实例化哪一个类。工厂方法使一个类的实例化延迟到其子类。
问题思考
考虑ppt文件。Application可能需要新建一个.ppt文件,也有可能新建一个.pptx文件,将来还有可能会出现.ppty文件。
适用性
- 当一个类不知道要创建对象的具体类,只知道抽象父类的时候
- 当一个类希望由它的的子类来指定它所创建的对象的时候
类图
factory_method实现
class MyProduct : public IProduct {
};
class ICreator {
public:
virtual Product *CreateProduct() = 0;
// either way is ok. You can also pass arguments here
// virtual Product *CreateProduct() {
// return new Product();
// };
virtual ~ICreate() {} // 以后的文档都会省略dtor。此处仅作为提示。
};
class MyCreator : public Creator {
public:
IProduct *CreateProduct() override {
return new MyProduct();
}
};
class AnotherCreator : public Creator {
public:
IProduct *CreateProduct() override {
return new AnotherProduct();
}
};
注意:方法CreateProduct可以是纯虚函数,也可以是虚函数。如果为虚函数,可以提供一个默认的实现。
效果:
传统的方式是通过if else来判断需要新建的类,这样容易造成庞大的if else。如果要新建一个Product,需要修改if else,这样很容易出错。工厂方法通过继承和实现虚函数,子类可以构造特定的Product子类。如果需要添加一个Product子类,只需要新建一个Creator子类,由子类负责新Product的新建工作。