c++之抽象工厂模式
发布日期:2021-09-25 21:40:49 浏览次数:0 分类:技术文章

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

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

以下的例子说明:

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

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即可生产不同的产品,不需要改变其他的代码。

上一篇:c++之策略模式
下一篇:c++之工厂方法模式

关于作者

    白红宇是个全栈工程师,前端vue,小程序,app开发到后端框架设计,数据库设计,环境部署上线运维。

最新文章

postman如何测试php接口_使用postman玩转接口测试 2021-06-25
vue切换class_Vue 菜单栏点击切换单个class(高亮)的方法 2021-06-25
tr069开源代码文档_tr069简单实现源码分享 2021-06-25
hive报错 spark_Spark是否能替代Hive 2021-06-25
mvc 项目 webconfig 打开错误_【实战 Ids4】 又一个项目迁移完成(MVC) 2021-06-25
挖掘机燃料_简阳水陆二用挖掘机哪里租赁 2021-06-25
python r开头字符串_20道python二级考试选择题,检测自己是否掌握基础 2021-06-25
oracle dg无法实时同步_陆金所去Oracle全过程 | 泉石内参 2021-06-25
orc最大sql长度_你是什么脸型,就剪什么刘海,这5款最显脸小! 2021-06-25
如何区分网线是几类的_如何区分:屏蔽网线、双绞线、超五类双屏蔽网线的作用?... 2021-06-25
plsql点击中断按钮没反应_奔驰仪表盘亮度怎么调节,有时调节没反应是咋回事?... 2021-06-25
rabbitmq 为什么是15672_RabbitMq底层原理分析 2021-06-25
r roc曲线 语言_R语言绘制ROC曲线 2021-06-25
做 web开发 用j2se 还是 javaee_【知识分享】|简单的后端开发(JavaEE组) 2021-06-25
网站正在建设中_网站建设中适用的几种推广方法 2021-06-25
c# uri 取文件名_C# System.Uri类获取Url的各种属性 2021-06-25
创业阶段如何找客户_怎么才叫创业 创业分为哪几个阶段? 2021-06-25
listbox wpf 取消边框_wpf ListBox删除 2021-06-25
小程序获取城市经纬度_微信小程序获取当前位置和城市名 2021-06-25
scala 模式匹配支持正则吗_scala 正则匹配 2021-06-25