美文网首页设计模式设计模式 BY C++程序员
【C++ 设计模式】1-2.工厂方法模式

【C++ 设计模式】1-2.工厂方法模式

作者: JeremyYv | 来源:发表于2019-10-12 23:28 被阅读0次
    • 工厂方法模式:一种创建型设计模式


    • 应用场景:

      简单工厂模式之上,考虑到工厂如果新加产品,需要修改产品类型的枚举,并修改工厂生产产品时,对入参类型判断的代码,当然已验证过的代码被修改后也需要重新验证,违反了开闭原则

      于是工厂方法模式登场:

      将生产模式改为一个工厂只专注于生产一种产品。有新产品则创建新工厂,无需改动原本工厂。

    • 实现方式:

      所有工厂继承自工厂抽象类,均可以生产一种产品。

      如果要制作某种产品,就使用该产品所对应的工厂进行生产。

    • 优点:

      新增产品时,无需改动原本代码,新增产品类与工厂类即可,符合开闭原则。

    • 缺点:

      每新增一种产品时,就要增加两个类(产品类和它对应的工厂类),当扩展至大量产品种类时,就会产生大量的类,难于管理。


    以下是工厂方法模式的简易代码实现
    // FactoryMethod.hpp
    #include <iostream>
    using namespace std;
    
    // 产品抽象类
    class Product {
    public:
        virtual void Show() = 0; // 用于验证产品信息
    };
    
    class WoodDesk: public Product {
    public: 
        void Show() {
            cout << "WoodDesk" << endl;
        }
    };
    
    class WoodChair: public Product {
    public:
        void Show() {
            cout << "WoodChair" << endl;
        }
    };
    
    // 工厂抽象类
    class Factory {
    public:
        virtual Product* CreateProduct() = 0;
    };
    
    class DeskFactory: public Factory {
    public:
        Product* CreateProduct() {
            return new WoodDesk();
        }
    };
    
    class ChairFactory : public Factory {
    public:
        Product* CreateProduct() {
            return new WoodChair();
        }
    };
    
    主函数中的使用
    #include "FactoryMethod.hpp"
    
    int main()
    {
        Factory* FactoryDesk = new DeskFactory();
        Product* DeskWood = FactoryDesk->CreateProduct();
        DeskWood->Show();
     
        Factory* FactoryChair = new ChairFactory();
        Product* ChairWood = FactoryChair->CreateProduct();
        ChairWood->Show();
     
        if (NULL != FactoryDesk) {
            delete FactoryDesk;
            FactoryDesk = NULL;
        }
        if (NULL != FactoryChair) {
            delete FactoryChair;
            FactoryChair = NULL;
        }
        return 0;
    }
    
    控制台输出结果
    WoodDesk
    WoodChair
    

    相关文章

      网友评论

        本文标题:【C++ 设计模式】1-2.工厂方法模式

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