美文网首页设计模式设计模式 BY C++程序员
【C++ 设计模式】2.抽象工厂模式

【C++ 设计模式】2.抽象工厂模式

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


    • 应用场景:
      工厂方法模式之上,考虑到每一种产品就要有一个工厂,产品扩展种类时会增加大量的类,难于管理,对一种情景提出了抽象工厂模式:

      原本生产木桌和木椅的工厂,要增加铁桌和铁椅这两种产品种类。
      如果使用工厂方法模式,则需要在原本两个工厂的基础上,再增加两个工厂。
      而此时可以将一个工厂定位为木质工厂,另一个工厂为铁质工厂,两个工厂分别都有桌和椅两条生产线。

    • 实现方式:
      工厂方法模式的工厂抽象类中增加生产产品的接口,并在工厂实现类中实现具体的生产操作。

    • 优点:
      便于扩展已有产品的系列。

    • 缺点:
      增加新的产品类型时(已有桌、椅,要增加门),需要修改所有工厂。


    以下是抽象工厂模式的简易代码实现
    // AbstractFactory.hpp
    #include <iostream>
    using namespace std;
    
    // 产品A抽象类
    class Desk {
    public:
        virtual void Show() = 0;
    };
    
    // 产品B抽象类
    class Chair {
    public:
        virtual void Show() = 0;
    };
    
    class WoodDesk: public Desk {
    public:
        void Show() {
            cout << "WoodDesk" << endl;
        }
    };
    
    class IronDesk: public Desk {
    public:
        void Show() {
            cout << "IronDesk" << endl;
        }
    };
    
    class WoodChair: public Chair {
    public:
        void Show() {
            cout << "WoodChair" << endl;
        }
    };
    
    class IronChair: public Chair {
    public:
        void Show() {
            cout << "IronChair" << endl;
        }
    };
    
    // 工厂抽象类
    class Factory {
    public:
        virtual Desk* CreateDesk() = 0;
        virtual Chair* CreateChair() = 0;
    };
    
    // 生产木质产品的工厂
    class WoodFactory: public Factory {
    public:
        Desk* CreateDesk() {
            return new WoodDesk();
        }
    
        Chair* CreateChair() {
            return new WoodChair();
        }
    };
    
    // 生产铁质产品的工厂
    class IronFactory: public Factory {
    public:
        Desk* CreateDesk() {
            return new IronDesk();
        }
    
        Chair* CreateChair() {
            return new IronChair();
        }
    };
    
    主函数中的使用
    #include "AbstractFactory.hpp"
    
    int main()
    {
        Factory* FactoryWood = new WoodFactory();
        // 木工厂生产木桌
        Desk* DeskWood = FactoryWood->CreateDesk();
        DeskWood->Show();
     
        Factory* FactoryIron = new IronFactory();
        // 铁工厂生产铁椅
        Chair* ChairIron = FactoryIron->CreateChair();
        ChairIron->Show();
     
        if (NULL != FactoryWood) {
            delete FactoryWood;
            FactoryWood = NULL;
        }
        if (NULL != FactoryIron) {
            delete FactoryIron;
            FactoryIron  = NULL;
        }
        return 0;
    }
    
    控制台输出结果
    WoodDesk
    IronChair
    

    相关文章

      网友评论

        本文标题:【C++ 设计模式】2.抽象工厂模式

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