美文网首页
创建型模式1-工厂方法

创建型模式1-工厂方法

作者: sunblog | 来源:发表于2018-04-16 23:18 被阅读0次

    创建型模式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-工厂方法

          本文链接:https://www.haomeiwen.com/subject/ptmykftx.html