美文网首页
设计模式-创建模式-抽象工厂模式

设计模式-创建模式-抽象工厂模式

作者: 阿棍儿_Leon | 来源:发表于2020-04-28 16:11 被阅读0次

随着生产规模扩大,工厂和产品的管理就变得麻烦了,为了不再增加工厂种类,可以增加原有工厂的生产能力。
例如产品不仅分为A、B两类,还可以按照另一种维度分为0、1两类,这相当于为每一个字母大类都增加了一个数字子类产品。这时,可以扩展每个工厂的能力,令每个工厂还是都可以生产A、B两类产品,但是每个工厂都只能生产一个数字子类产品。

以下代码定义产品分类,产品A分为A0和A1两类,产品B分为B0和B1两类。

#include <iostream>

using namespace std;

class ProductsA
{
public:
    virtual void Display() = 0;
    virtual ~ProductsA(){}
};

class ProductA0:public ProductsA
{
public:
    void Display()
    {
        cout<<__PRETTY_FUNCTION__<<endl;
    }
};

class ProductA1:public ProductsA
{
public:
    void Display()
    {
        cout<<__PRETTY_FUNCTION__<<endl;
    }
};

class ProductsB
{
public:
    virtual void Display() = 0;
    virtual ~ProductsB(){}
};

class ProductB0:public ProductsB
{
public:
    void Display()
    {
        cout<<__PRETTY_FUNCTION__<<endl;
    }
};

class ProductB1:public ProductsB
{
public:
    void Display()
    {
        cout<<__PRETTY_FUNCTION__<<endl;
    }
};

以下代码定义工厂类,分为0类工厂和1类工厂,分别生产两种产品。

class AbstractFactory
{
public:
    virtual ProductsA* CreateProductA()=0;
    virtual ProductsB* CreateProductB()=0;
};

class Factory0:public AbstractFactory
{
public:
    ProductsA* CreateProductA()
    {
        return new ProductA0();
    }
    ProductsB* CreateProductB()
    {
        return new ProductB0();
    }
};

class Factory1:public AbstractFactory
{
public:
    ProductsA* CreateProductA()
    {
        return new ProductA1();
    }
    ProductsB* CreateProductB()
    {
        return new ProductB1();
    }
};

以下代码用0、1工厂分别生产了A、B类商品,一共是4种商品。

int main(void){

    AbstractFactory* factory0 = new Factory0();
    ProductsA* productA = factory0->CreateProductA();
    productA->Display();
    ProductsB* productB = factory0->CreateProductB();
    productB->Display();
    delete factory0;
    delete productA;
    delete productB;

    AbstractFactory* factory1 = new Factory1();
    productA = factory1->CreateProductA();
    productA->Display();
    productB = factory1->CreateProductB();
    productB->Display();
    delete factory1;
    delete productA;
    delete productB;

    return 0;
}

输出

virtual void ProductA0::Display()
virtual void ProductB0::Display()
virtual void ProductA1::Display()
virtual void ProductB1::Display()

相关文章

  • Android 源码设计模式解析与实战 读书笔记 6 抽象工厂模

    创建型设计模式 —— 抽象工厂模式 1. 抽象工厂模式介绍 抽象工厂模式(Abstract Factory Pat...

  • 2. 设计模式与架构

    一、 设计模式 创建型模式抽象工厂模式(AbstractFactory)、工厂模式(Factory)、创建者模式(...

  • 抽象工厂模式

    抽象工厂设计模式 介绍 抽象工厂设计模式是设计模式中“创建型模式”中的一种,它是用来创建其它工厂的超级工厂。所以该...

  • 设计模式——工厂模式和抽象工厂模式

    Java设计模式——工厂模式 工厂模式和抽象工厂模式都属于创建型模式。 创建型模式这些设计模式提供了一种在创建对象...

  • 设计模式[3]-抽象工厂模式-Abstract Factory

    1.抽象工厂模式介绍 抽象工厂模式是创建型设计模式,可以创建一组对象。与工厂方法模式相比,抽象工厂模式中的具体工厂...

  • 设计模式系列

    创建型模式: 设计模式之工厂模式(Factory Pattern)设计模式之抽象工厂模式(Abstract Fac...

  • 设计模式-抽象工厂模式

    1 抽象工厂模式介绍 抽象工厂模式(Abstract Factory Pattern)也是创建型设计模式之一,抽象...

  • android常用设计模式

    26种设计模式 创建型设计模式[5] 单例模式,工厂模式,抽象工厂模式,建造模式,原型模式,[简单工厂模式] 结构...

  • 2021-11-16 - 学习记录

    设计模式学习:创建型:工厂(工厂方法,抽象工厂),建造者,单例,原型 设计模式:工厂模式 简单工厂 工厂方法 抽象工厂

  • Kotlin(八)kotlin设计模式-创建型

    创建型模式 - 工厂 Kotlin里面几种主流创建型设计模式:工厂方法模式,抽象工厂模式,构建者模式 8.1 伴生...

网友评论

      本文标题:设计模式-创建模式-抽象工厂模式

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