大话设计模式C++版——简单工厂模式

简单工厂模式应该是所有设计模式中最简单,也最基础的一种模式,以下是一个简单的采用工厂模式写一个加减法的计算器。

1、抽象接口类——依赖倒转原则(高层和底层都要依赖于抽象,针对接口编程)

class IOperation
{
public:
	IOperation() : m_nNuml(0), m_nNumr(0) {}
	virtual	~IOperation() {}

	virtual	void	SetNum(int nNuml = 0, int nNumr = 0)
	{
		m_nNuml = nNuml;
		m_nNumr = nNumr;
	}
	virtual	int		CalculateResult() = 0;

protected:
	int	m_nNuml, m_nNumr;
};

注:m_nNuml, m_nNumr申明为protected,是为了让继承类中能够使用,同时又保持其访问的私有性,这和C#是不一样的地方

2、接口实现对象类——加法、减法类(乘除法就省略了,类似)

class COperation_Add : public IOperation
{
public:
	int		CalculateResult()
	{
		return	m_nNuml + m_nNumr;
	}
};

class COperation_Dec : public IOperation
{
public:
	int		CalculateResult()
	{
		return	m_nNuml - m_nNumr;
	}
};

3、工厂类——生成抽象对象

<span style="font-size:14px;">class CClassFactory
{
public:
	CClassFactory() {}
	~CClassFactory() {}

	IOperation*	CreateObject(char cOperation)
	{
		IOperation*	poCOperation = NULL;
		switch (cOperation)
		{
		case '+':
			{
				poCOperation = new COperation_Add();
				break;
			}
		case '-':
			{
				poCOperation = new	COperation_Dec();
				break;
			}
			break;
		}

		return	poCOperation;
	}
};

4、使用工厂生产对象

void	Test()
{
	CClassFactory	oCClassFactory;
	IOperation*		poIOperation = NULL;

	poIOperation = oCClassFactory.CreateObject('+');

	if (poIOperation)
	{
		poIOperation->SetNum(2, 3);
		printf("2 + 3 = %d\n", poIOperation->CalculateResult());

		delete poIOperation;
	}
}

简单工厂模式的好处在于将具体对象的产生过程进行了封装,用户不需要关系这个对象怎么来的,只需要just use it,同时有了对象工厂这个中间人,可以根据需要替换掉相应的对象,使用更加灵活。但简单工厂模式中,判断该产生何种对象时,采用了switch结构,如果需要改动或者增减对象时,需要改动switch结构的代码,不符合开放—封闭原则,即函数、类不可以修改,只能扩展。如何解决此问题,请看下回分解(大话设计模式C++版——表驱动法改造简单工厂模式)

时间: 2025-01-02 15:43:10

大话设计模式C++版——简单工厂模式的相关文章

大话设计模式C++版——抽象工厂模式

前面说过,简单工厂模式是最基础的一种设计模式,那以工厂命名的设计模式就是23种设计模式中最多的一种,他们一脉相承,一步一步进化而来,这里就是其中的最后一种--抽象工厂模式(Abstract Factory),其是在工厂方法模式的基础上改进而来,如果没有弄明白工厂方法模式的同学请先观看<大话设计模式C++版--工厂方法模式>. 为什么会有抽象工厂模式?抽象工厂模式是简单工厂模式缺陷的终极解决方式么?NO,抽象工厂模式并不是为了解决简单工厂模式的缺陷而活着,它是因为有新的使命而诞生. 一个简单的例

大话设计模式-第一章-简单工厂模式

一.UML图 二.包含的角色 简单工厂模式包含三个角色:(1)工厂类Factory(2)抽象产品类AbstractProduct(3)具体产品类ConcreteProduct. (1)Factory:工厂类是用来制造产品的.因此,在Factory中有一个用于制造产品的Create函数或者Generate函数之类的函数.这个函数能够根据"标识符"的不同生成不同的ConcreteProduct,当然这些ConcreteProduct都是继承自AbstractProduct的. (2)Abs

[大话设计模式]学习笔记——简单工厂模式

序 说好的每天进步一点点的,结果工作太忙,一直在加班,都没有学习新东西.我还要进BAT呢. 坚持每天学习新东西. 写代码时,意识到在代码结构上还是有点欠缺.赶紧补上. 纪录对设计模式的认识.小菜变大鸟.进攻BAT. 应用场景: 编写一个计算器控制台程序,要求输入两个数和运算符号,得到结果. 这本书使用C#写的.已有博主用JAVA写出来,参考:http://blog.csdn.net/ghsau/article/details/8163418 常见的做法: 写一个方法封装计算机的功能,我们只需传参

大话设计模式第一章-简单工厂模式

1 简单工厂模式--uml   继承关系--空心三角形--实线 实线接口 空心三角形--实虚线 聚合关系  空心菱形---实线箭头    雁群和大雁 组合关系-  实心菱形---实线箭头   鸟和翅膀 依赖关系-虚线箭头  如动物需要氧气和水  d 简单工厂模式demo--本地demo 库 原文地址:https://www.cnblogs.com/spps/p/9942846.html

C#设计模式系列:简单工厂模式(Simple Factory)

1.简单工厂模式简介 1.1>.定义 简单工厂模式定义一个Factory类,可以根据参数的不同返回不同类的实例,被创建的实例通常有共同的父类. 简单工厂模式只需要一个Factory类. 简单工厂模式又称为静态工厂模式,Factory类为静态类或包含静态方法. 1.2>.使用频率  中 2.简单工厂模式结构 2.1>.结构图 2.2>.参与者 简单工厂模式参与者: ◊ Product:抽象产品类,将具体产品类公共的代码进行抽象和提取后封装在一个抽象产品类中. ◊ ConcretePr

(设计模式之一)浅析简单工厂模式

简单工厂模式 举个两个例子: 我输入两个数字和(+ - * /)其中一个符号,计算出两个数的结果. 饲养员让(狗 猫 鸟 猪)其中一个动物 叫 这里就是一个简单的工厂模式, 用户只需要提供他需要的接口,而不需要知道具体的实现 工厂判断用户提供的接口,创建对应的子类对象, 返回父类变量给用户(这里涉及里氏替换原则:声明父类变量替换子类对象) 当后面追加新的操作类例如:求根类  求平方类 , 从数据安全角度: 只需要创建新的类继承于Operation抽象类 ,从而不影响其他操作类(+ - * /),

设计模式学习(二)-简单工厂模式

---恢复内容开始--- 简单工厂设计模式 简单工厂模式定义: 简单工厂设计模式又称为静态工厂方法(Static Factory Method)模式,它属于类创建型模式.在简单工厂模式中,可以根据参数的不同返回不同类的实例.简单工厂模式专门定义一个类来负责创建其他类的实例,被创建的实例通常都具有共同的父类. 简单工厂主要分为如下几个角色 抽象产品(abstract product):为所有具体产品的抽象表现,一般为抽象类 具体产品(product):为抽象产品的具体实现 生成产品工厂(facto

设计模式之一:简单工厂模式

这几天准备把设计模式好好看一下,顺带着做下笔记,设计模式以前零零散散看过一些,做项目时也用过或见到过一些设计模式,但是可能只是停留在见到那种设计模式时有点印象,有的时候也将名称弄混,希望这次系统学习的机会能让我对设计模式有个更加深刻的印象吧. 这次学习设计模式主要的参考资料有: <大话设计模式> http://www.dofactory.com/net/design-patterns 上面两个都是用C#实现的,但是我准备用C++的代码实现一遍,权当加深下对C++的印象. 首先从最简单的简单工厂

Net设计模式实例之简单工厂模式(Simple Factory Pattern)

一.简单工厂模式简介(Bref Introduction) 简单工厂模式(Simple Factory Pattern)的优点是,工厂类中包含了必要的逻辑判断,根据客户端的选择条件动态实例化相关的类,对于客户端来说,去除了与具体产品的依赖 二.解决的问题(What To Solve) 客户实例化对象时不需要关心该对象是由哪个子类实例化的. 三.简单工厂模式分析(Analysis) 1.简单工厂模式结构 IProduct接口:抽象产品类 ConcreteProduct类:产品类的具体实现 Simp