抽象工厂模式

Posted 老羔羊

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了抽象工厂模式相关的知识,希望对你有一定的参考价值。

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

 

#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;
}

 

以上是关于抽象工厂模式的主要内容,如果未能解决你的问题,请参考以下文章

设计模式学习——简单工厂模式工厂模式抽象工厂模式

设计模式 创建者模式 工厂设计模式 -- 抽象工厂设计模式介绍和实现

设计模式:抽象工厂模式

设计模式11:抽象工厂模式

C++工厂模式(简单工厂工厂方法抽象工厂)

C++工厂模式(简单工厂工厂方法抽象工厂)