c++之抽象工厂模式

抽象工厂模式和工厂方法模式类似,因此也被称为工厂家族模式,属于创建型设计模式。

定义:提供一个创建一系列相关或者相互依赖对象的接口,而无需指定他们具体的类。

以下的例子说明:

市场上有神奇公司和希望公司,他们同时可以生产鼠标和电池,但是两个公司的鼠标和电池型号却是不一样的。

IMouseProduct(抽象鼠标产品)

IBatteryProduct(抽象电池产品)

-----------------------------------------------------------------

MagicBattery(神奇公司具体电池产品)

MagicMouse(神奇公司具体鼠标产品)

HopeBattery(希望公司具体电池产品)

HopeMouse(希望公司具体鼠标产品)

---------------------------------------------------------------

IFactory(抽象工厂)

MagicFactory(神奇公司工厂-生产神奇鼠标和电池)

HopeFactory(希望公司工厂-生产希望鼠标和电池)

代码:

#include <iostream>

using namespace std;

//抽象鼠标
class IMouseProduct{
public:
	virtual void createMouse() = 0;
};

//抽象电池
class IBatteryProduct{
public:
	virtual void createBattery() = 0;
};

//神奇公司电池
class MagicBattery :public IBatteryProduct
{
public:
	virtual void createBattery(){
		cout << "生产神奇电池" << endl;
	}
};

//神奇公司鼠标
class MagicMouse :public IMouseProduct
{
public:
	virtual void createMouse(){
		cout << "生产神奇鼠标" << endl;
	}
};

//希望公司电池
class HopeBattery :public IBatteryProduct
{
public:
	virtual void createBattery(){
		cout << "生产希望电池" << endl;
	}
};

//希望公司鼠标
class HopeMouse :public IMouseProduct
{
public:
	virtual void createMouse(){
		cout << "生产希望鼠标" << endl;
	}
};

//抽象工厂 
class IFactory
{
public:
	virtual IMouseProduct *createMouseProuct() = 0;
	virtual IBatteryProduct *createBatteryProduct() = 0;
};

//神奇工厂 生产鼠标和键盘
class MagicFactory :public IFactory
{
public:
	virtual IMouseProduct *createMouseProuct()
	{
		return new MagicMouse;
	}
	virtual IBatteryProduct *createBatteryProduct()
	{
		return new MagicBattery;
	}
};

//希望工厂 生产鼠标和键盘
class HopeFactory :public IFactory
{
public:
	virtual IMouseProduct *createMouseProuct()
	{
		return new HopeMouse;
	}
	virtual IBatteryProduct *createBatteryProduct()
	{
		return new HopeBattery;
	}
};

//客户端
int main()
{
	//神奇工厂
	//IFactory *fac = new MagicFactory;

	//希望工厂
	IFactory *fac = new HopeFactory;
	if (fac)
	{
		fac->createBatteryProduct()->createBattery();
		fac->createMouseProuct()->createMouse();
		delete fac;
		fac = nullptr;
	}

	return 0;
}

可以看到在客户端中,只需要实例化对应的具体工厂对象给IFactory即可生产不同的产品,不需要改变其他的代码。

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值