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

本文介绍了抽象工厂模式的主要目的和使用场景,并提供了C++语言的代码示例,通过电脑组装的例子展示了如何运用抽象工厂模式来组装游戏电脑和办公电脑。
摘要由CSDN通过智能技术生成

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.《设计模式:可复用面向对象软件的基础》

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值