创建型模式1-工厂方法

创建型模式1-工厂方法

创建型模式简

创建型模式主要有5个:

  1. 工厂方法(factory method)
  2. 抽象工厂(abstract factory)
  3. 单例模式(singleton)
  4. 构造者模式(builder)
  5. 原型模式(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的新建工作。

你可能感兴趣的:(创建型模式1-工厂方法)