• 抽象工厂模式


    抽象工厂模式就是在工厂方法模式、简单工厂模式上的进一步抽象,以前的工厂方法模式中每个工厂只能生产单一的产品,抽象工厂中的工厂(该工厂相当于简单工厂模式中的工厂,可以生产一系列产品)可以生产一系列的产品。

    #include <iostream>
    using namespace std;
    
    //产品A基类
    class ProductA
    {
    public:
        virtual void create() = 0;
        virtual ~ProductA() {}
    };
    
    //产品A1
    class ProductA1 : public ProductA
    {
    public:
        void create() { cout << "A1 create()" << endl; }
    };
    
    //产品A2
    class ProductA2 : public ProductA
    {
    public:
        void create() { cout << "A2 create()" << endl; }
    };
    
    //产品B基类    
    class ProductB
    {
    public:
        virtual void create() = 0;
        virtual ~ProductB() {}
    };
    
    //产品B1
    class ProductB1 : public ProductB
    {
    public:
        void create() { cout << "B1 create()" << endl; }
    };
    
    //产品B2
    class ProductB2 : public ProductB
    {
    public:
        void create() { cout << "B2 create()" << endl; }
    };
    
    //工厂基类
    class Factory
    {
    public:
        virtual ProductA* createProductA() = 0;
        virtual ProductB* createProductB() = 0;
        virtual ~Factory() {}
    };
    
    //工厂A
    class FactoryA :public Factory
    {
    public:
        ProductA* createProductA()
        {
            return new ProductA1();
        }
    
        ProductB* createProductB()
        {
            return new ProductB1();
        }
    };
    
    
    //工厂B
    class FactoryB : public Factory
    {
    public:
        ProductA* createProductA()
        {
            return new ProductA2();
        }
    
        ProductB* createProductB()
        {
            return new ProductB2();
        }
    };
    
    int main()
    {
        Factory* fa = new FactoryA();
        ProductA* paa = fa->createProductA();
        ProductB* pba = fa->createProductB();
        paa->create();
        pba->create();
        delete fa;
        fa = nullptr;
        delete paa;
        paa = nullptr;
        delete pba;
        pba = nullptr;
    
        Factory* fb = new FactoryB();
        ProductA* pab = fb->createProductA();
        ProductB* pbb = fb->createProductB();
        pab->create();
        pbb->create();
        delete fb;
        fb = nullptr;
        delete pab;
        pab = nullptr;
        delete pbb;
        pbb = nullptr;
    }
    在孤独中思考,在思考中成熟,在成熟中升华
  • 相关阅读:
    FastReport.Net使用:[13]如何使用表达式
    FastReport.Net使用:[11]公共对象属性介绍
    FastReport.Net使用:[10]报表栏目说明
    FastReport.Net使用:[9]多栏报表(多列报表)
    FastReport.Net使用:[8]交叉表一
    FastReport.Net使用:[7]打印空白行
    FastReport.Net使用:[6]HTML标签使用
    测试,测试开发,QA,QM,QC--------- 测试之路勿跑偏
    java 接口自动化测试之数据请求的简单封装
    java HttpClient POST请求
  • 原文地址:https://www.cnblogs.com/laogaoyang/p/5853018.html
Copyright © 2020-2023  润新知