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