C++设计模式之工厂模式(上)——简单工厂模式

工厂模式

概述

工厂模式属于一种创建型设计模式。其可以分为简单工厂模式,工厂模式和抽象工厂模式。工厂模式分为上、中、下三篇,本篇主要介绍简单工厂模式。

简单工厂模式

介绍

简单工厂模式可以理解为一个工厂根据产品的种类生产多种不同的产品。简单工厂模式只有一个工厂类,工厂类中提供一个工厂函数,用于根据产品种类生产各种不同产品。

示例

下面给出一个示例,来加深理解简单工厂模式。

有一个工厂(Factory)生产塑料笔筒(PlasticPenHolder)和铁制笔筒(IronPenHolder)。

cpp 复制代码
enum MyPenHolder
{
	plasticHolder,//塑料笔筒
	ironHolder//铁制笔筒
};

class PenHolder 
{
public:
	virtual void introduce() = 0;
};

class PlasticPenHolder :public PenHolder 
{
public:
	void introduce()override 
	{
		cout << "I am PlasticPenHolder!" << endl;
	}
};

class IronPenHolder :public PenHolder 
{
public:
	void introduce()override 
	{
		cout << "I am IronPenHolder!" << endl;
	}
};

class Factory 
{
public:
	PenHolder* createPenHolder(enum MyPenHolder &type) 
	{
		if (type == plasticHolder)
		{
			return new PlasticPenHolder;
		}
		else if (type == ironHolder)
		{
			return new IronPenHolder;
		}
		else 
		{
			return nullptr;
		}
	}
};

示例使用

cpp 复制代码
int main() 
{
	MyPenHolder type = MyPenHolder::plasticHolder;
	MyPenHolder type1 = MyPenHolder::ironHolder;
	
	Factory *factory = new Factory;
	PenHolder *holder = factory->createPenHolder(type);
	PenHolder *holder1 = factory->createPenHolder(type1);
	holder->introduce();
	holder1->introduce();

	delete holder;
	delete holder1;
	delete factory;

	return 0;
}

运行结果

缺点

当需要生产的产品的种类增加时,工厂类就需要修改,打破了程序设计原则中的封闭原则。

相关推荐
三月微暖寻春笋11 分钟前
【和春笋一起学C++】(五十)在构造函数中使用new时的注意事项
c++·new·构造函数
Chen--Xing16 分钟前
LeetCode 49.字母异位词分组
c++·python·算法·leetcode·rust
_OP_CHEN37 分钟前
【算法基础篇】(三十三)动态规划之区间 DP:从回文串到石子合并,吃透区间类问题的万能解法
c++·算法·蓝桥杯·动态规划·算法竞赛·acm/icpc·区间动态规划
coderxiaohan43 分钟前
【C++】无序容器unordered_set和unordered_map的使用
开发语言·c++
charlie1145141911 小时前
深入理解CC++的编译与链接技术9:动态库细节
c语言·开发语言·c++·学习·动态库
isyoungboy1 小时前
c++使用win新api替代DirectShow驱动uvc摄像头,可改c#驱动
开发语言·c++·c#
世转神风-1 小时前
qt-windows用户点击.exe,报错:缺少libgcc_s_seh-1.dll
c++·qt
慕容青峰1 小时前
【牛客周赛 107】E 题【小苯的刷怪笼】题解
c++·算法·sublime text
羑悻的小杀马特2 小时前
C++多线程同步工具箱:call_once精准触发、lock_guard/unique_lock智能管理,打造无死锁程序!
c++·多线程·死锁·lock_guard·unique_lock·call_once
电子_咸鱼2 小时前
【QT——信号和槽(1)】
linux·c语言·开发语言·数据库·c++·git·qt