设计模式学习笔记(C++实现)(三)--抽象工厂模式

1.抽象工厂模式简介

  • 英文名称
    Abstract Factory
  • 主要目的
    该模式一系列相关或者相互依赖对象的接口,而不用指定它们具体的类。
  • 使用场景
    1.一个系统需要独立于它的产品的创建、组合和表示时;
    2.一个系统要由多个产品系列中的一个来配置时;
    3.当你要强调一血了相关的产品对象的设计以便进行联合使用时;
    4.当你提供一个类库,而只想显示它们的接口而不是实现的时候。

2.抽象工厂模式代码示例

  • 测试平台
    1.开发语言:C++
    2.开发工具:VS2015
    3.操作系统:Win7 X64
  • 代码说明
    1.AbstractFactory–抽象工厂类,定义抽象产品生产接口;
    2.GamePcFatory、WorkPcFatory–具体工厂类,生成具体的产品;
    3.Abstract_Cpu、Abstract_VideoCard–抽象产品类;
    4.I7_8700、I5_5400、GTX_1080_Ti、GTX_1050–具体产品类,用于创建具体的产品。

    注意:
    1.本例以电脑组装为例,利用抽象工厂的概念,来分别组装游戏电脑和办公电脑;

  • 具体代码

#include <iostream>
using namespace std;

//抽象CPU产品类
class Abstract_Cpu
{
};

//具体抽象CPU产品1
class I7_8700:public Abstract_Cpu
{
public:
    I7_8700()
    {
        cout << "CPU: i7 8700" << endl;
    }
};

//具体抽象CPU产品2
class I5_5400 :public Abstract_Cpu
{
public:
    I5_5400()
    {
        cout << "CPU: i5 5400" << endl;
    }
};

//抽象显卡产品类
class Abstract_VideoCard
{

};

//具体显卡产品1
class GTX_1080_Ti :public Abstract_VideoCard
{
public:
    GTX_1080_Ti()
    {
        cout << "显卡:gtx 1080 ti" << endl;
    }
};

//具体显卡产品2
class GTX_1050 :public Abstract_VideoCard
{
public:
    GTX_1050()
    {
        cout << "显卡:gtx 1050" << endl;
    }
};

//抽象工厂类
class AbstractFactory
{
public:
    virtual Abstract_Cpu* CreateCpu() = 0;                  //CPU选择抽象接口
    virtual Abstract_VideoCard* CreateVideoCard() = 0;      //显卡选择抽象接口
};

//具体工厂类1
class GamePcFatory:public AbstractFactory
{
public:
    Abstract_Cpu* CreateCpu()                   //CPU选择接口
    {
        return new I7_8700();
    }

    Abstract_VideoCard* CreateVideoCard()      //显卡选择接口
    {
        return new GTX_1080_Ti();
    }
};

//具体工厂类2
class WorkPcFatory :public AbstractFactory
{
public:
    Abstract_Cpu* CreateCpu()                   //CPU选择接口
    {
        return new I5_5400();
    }

    Abstract_VideoCard* CreateVideoCard()      //显卡选择接口
    {
        return new GTX_1050();
    }
};


int main()
{
    //组装游戏电脑
    cout << "组装游戏电脑,配置如下:" << endl;

    AbstractFactory* pFactory1 = new GamePcFatory();
    if (NULL != pFactory1)
    {
        //组装CPU
        Abstract_Cpu* pCpu1 = pFactory1->CreateCpu();

        //组装显卡
        Abstract_VideoCard* pVideoCard1 = pFactory1->CreateVideoCard();

        delete pCpu1;
        pCpu1 = NULL;

        delete pVideoCard1;
        pVideoCard1 = NULL;

        delete pFactory1;
        pFactory1 = NULL;
    }

    cout << endl << "组装办公电脑,配置如下:" << endl;
    AbstractFactory* pFactory2 = new WorkPcFatory();
    if (NULL != pFactory2)
    {
        //组装CPU
        Abstract_Cpu* pCpu2 = pFactory2->CreateCpu();

        //组装显卡
        Abstract_VideoCard* pVideoCard2 = pFactory2->CreateVideoCard();

        delete pCpu2;
        pCpu2 = NULL;

        delete pVideoCard2;
        pVideoCard2 = NULL;

        delete pFactory2;
        pFactory2 = NULL;
    }

    getchar();
    return 0;
}
  • 输出结果
    这里写图片描述

栏目导航
上一篇:设计模式学习笔记(C++实现)(二)–工厂方法模式
下一篇:设计模式学习笔记(C++实现)(四)–建造者模式

参考文献:
1.《设计模式:可复用面向对象软件的基础》

猜你喜欢

转载自blog.csdn.net/u014337397/article/details/80382267