C++设计模式详解之抽象工厂模式解析

抽象工厂模式概念

  • 提供一个接口,用于创建相关或依赖对象的家族,而不需要明确指定具体类

抽象工厂模式实例

以组装电脑为例,一般来说,电脑组装都不可能是一家公司的零件,简单的来说,显卡就有NVIDIA和AMD两个牌子的厂商,电脑系统由windows和mac两种,所以可以用抽象工厂的思维来用计算机表达出来。

头文件

#include "stdafx.h"

//显卡基类
class GraphicCard
{
public:
  virtual void cardType()=0; //显卡品牌
};

//英伟达显卡
class NvidiaGraphicCard:public GraphicCard
{
public:
	 void cardType(); //显卡品牌
};

//AMD显卡
class AmdGraphicCard:public GraphicCard
{
public:
	void cardType(); //显卡品牌
};

//计算机系统基类
class ComputerSystem
{
public:
	virtual void systemType() =0;
};

//MAC计算机系统类
class MACComputerSystem:public ComputerSystem
{
public:
	void systemType();
};

//WIN计算机系统类
class WINComputerSystem:public ComputerSystem
{
public:
	void systemType();
};

//工厂基类
class Factory
{
public:
	virtual ComputerSystem * createComputerSystem() = 0; //创建计算机系统的类别
	virtual GraphicCard* createGraphicSystem() = 0; //创建显卡的类别
};

//宏碁工厂
class AcerFactory:public Factory
{
public:
	 ComputerSystem * createComputerSystem(); //创建计算机系统的类别
	 GraphicCard* createGraphicSystem(); //创建显卡的类别
};

//华硕工厂
class AsusFactory:public Factory
{
public:
	ComputerSystem * createComputerSystem(); //创建计算机系统的类别
    GraphicCard* createGraphicSystem(); //创建显卡的类别
};

实现文件:

// AbstractFactory.cpp : 定义控制台应用程序的入口点。
//

#include "stdafx.h"
#include "AbstractFactory.h"

using namespace std;

//实现

//实现显卡
void AmdGraphicCard::cardType()
{
	cout << "生产AMD显卡" << endl; 
}

void NvidiaGraphicCard::cardType()
{
	cout << "生产英伟达显卡" << endl; 
}

void WINComputerSystem::systemType()
{
	cout << "系统为WINDOWS系统" << endl;
}

void MACComputerSystem::systemType()
{
	cout << "系统为MAC系统" << endl;
}

ComputerSystem* AcerFactory::createComputerSystem()
{
	cout << "宏碁电脑工厂:"<<endl; 
	return new MACComputerSystem(); //生产Mac系统
}

ComputerSystem* AsusFactory::createComputerSystem()
{
	cout << "华硕电脑工厂:"<<endl; 
	return new WINComputerSystem(); //生产WIN系统
}

GraphicCard* AcerFactory::createGraphicSystem()
{
	cout << "宏碁电脑工厂:"<<endl; 
	return new AmdGraphicCard(); //生产amd显卡
}

GraphicCard* AsusFactory::createGraphicSystem()
{
	cout << "华硕电脑工厂:"<<endl; 
	return new NvidiaGraphicCard(); //生产英伟达显卡
}


int _tmain(int argc, _TCHAR* argv[])
{
	//调用
	Factory * cur_factory = new AcerFactory();
	ComputerSystem * cur_system= cur_factory->createComputerSystem();
	cur_system->systemType();
	GraphicCard * cur_gra = cur_factory->createGraphicSystem();
	cur_gra->cardType();
	return 0;
}


运行结果:

抽象工厂模式用处

抽象工厂可以用于描述现在全球化市场,就是一辆车的配件可以来自各个地方,而且每个地方生产的东西可能还都不相似。

比较麻烦的一点的,如果需要添加产品的话,需要增加很多类。

抽象工厂方法模式和工厂方法模式的区别

  • 工厂方法模式只有一个抽象产品类,而抽象工厂有多个
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Music 爱好者

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值