设计模式之抽象工厂模式(Abstract Factory Pattern)

  定义:定义一个用于创建对象的接口,让子类来决定实例化哪个类。

  对于工厂方法模式的组成:
  1)抽象工厂角色: 这是工厂方法模式的核心,它与应用程序无关。是具体工厂角色必须实现的接口或者必须继承的父类。
  2)具体工厂角色:它含有和具体业务逻辑有关的代码。由应用程序调用以创建对应的具体产品的对象。
  3)抽象产品角色:它是具体产品继承的父类或者是实现的接口。
  4)具体产品角色:具体工厂角色所创建的对象就是此角色的实例。

using namespace std;

class abstractProduct
{
public:
    virtual ~abstractProduct() {};
    virtual void show() = 0;
};

class Product1 :public abstractProduct
{
public:
    void show() { cout << "正在生产一号产品" << endl; }
};

class Product2 :public abstractProduct
{
public:
    void show() { cout << "正在生产二号产品" << endl; }
};

class Product3 :public abstractProduct
{
public:
    void show() { cout << "正在生产三号产品" << endl; }
};


class abstractFactory
{
public:
    //纯虚函数,工厂创建产品线,联系工厂与产品的纽带
    virtual abstractProduct * creatProduct() = 0;
};

class Factory1 :public abstractFactory
{
public:
    abstractProduct * creatProduct()
    {
        printf("一号工厂");
        return new Product1();
    }
};

class Factory2 :public abstractFactory
{
public:
    abstractProduct * creatProduct()
    {
        printf("二号工厂");
        return new Product2();
    }
};

class Factory3 :public abstractFactory
{
public:
    abstractProduct * creatProduct()
    {
        printf("三号工厂");
        return new Product3();
    }
};

int main()
{
    //创建一号工厂
    Factory1 factory1;
    abstractProduct* pProduct1 = factory1.creatProduct();
    pProduct1->show();

    //创建二号工厂
    Factory2 factory2;
    abstractProduct* pProduct2 = factory2.creatProduct();
    pProduct2->show();

    //创建三号工厂
    Factory3 factory3;
    abstractProduct* pProduct3 = factory3.creatProduct();
    pProduct3->show();

    delete pProduct1;
    delete pProduct2;
    delete pProduct3;
    return 0;
}

 

既然选择了远方,便只顾风雨兼程
原文地址:https://www.cnblogs.com/Forever-Road/p/6590270.html