C++ 01简单工厂模式

原创 2015年11月20日 20:02:32

下文是关于设计一个计算器的思路,本文采用了简单工厂模式设计计算器,定义一个工厂类,通过工厂类中的createOperate函数做逻辑判断,来调用具体的计算器类。直接看结构图,简单明了。

简单工厂模式结构图如下:


代码实现如下:

#include<iostream>
#include<string>

using namespace std;
//抽象运算类
class Operation
{
private:
	double numberA = 0;
	double numberB = 0;
public:
	double getNumberA()
	{
		return numberA;
	}
	void setNumberA(double _numberA)
	{
		numberA = _numberA;
	}
	double getNumberB()
	{
		return numberB;
	}
	void setNumberB(double _numberB)
	{
		numberB = _numberB;
	}
    
	virtual double getResult() =0
	{
		double result = 0;
		return result;
	}
};

//加法类
class OperationAdd :public Operation
{
public:
	double getResult()
	{
		double result = 0;
		result = getNumberA() + getNumberB();
		return result;
	}
};

//减法类
class OperationSub :public Operation
{
public:
	double getResult()
	{
		double result = 0;
		result = getNumberA()-getNumberB();
		return result;
	}
};

//乘法类
class OperationMul :public Operation
{
public:
	double getResult()
	{
		double result = 0;
		result = getNumberA() * getNumberB();
		return result;
	}
};

//除法类
class OperationDiv :public Operation
{
public:
	double getResult()
	{
		double result = 0;
		if (this->getNumberB() == 0)
		{
			cout << "除数不能为0" << endl;
			return 0;
		}
		result = getNumberA() / getNumberB();
		return result;
	}
};

//运算工厂类
class OperationFactory
{
public:
	static Operation* createOperate(const char operate)
	{
		Operation * oper = 0;
		switch (operate)
		{
		case '+':
				oper = new OperationAdd();
				break;
		case '-':
			oper = new OperationSub();
			break;
		case '*':
			oper = new OperationMul();
			break;
		case '/':
			oper = new OperationDiv();
			break;
		}
		return oper;
	}
};

//客户端代码
int main()
{
	Operation *oper = 0;
	oper = OperationFactory::createOperate('+');
	oper->setNumberA(1);
	oper->setNumberB(2);
	double result = oper->getResult();

	cout << result << endl;
	return 0;
}
简单工厂模式的最大优点在于工厂类中包含了必要的逻辑判断,根据客户端的选择条件动态实例化相关的类,对于客户端来说,去除了与具体产品的依赖。

如果再扩展其他功能,需要添加具体类来继承抽象操作类,且要修改工厂类,这就违背了开放-封闭原则(修改了原有的类)。

简单工厂模式的C++、Java实现

  • 2017年02月04日 18:05
  • 21.84MB
  • 下载

Java设计模式圣经连载(01)-简单工厂模式

1.1 简单工厂(Simple Factory)模式 简单工厂模式是类的创建,又叫静态工厂方法(Static Factory Methord)模式。简单工厂模式是由一个工厂对象决定创造哪...

大话设计模式01----简单工厂模式

1 面向对象的好处 可维护、可重复、可扩展。 2 包含的角色 简单工厂模式包含三个角色: 工厂类Factory:工厂类是用来制造产品的。因此,在Factory中有一个用于制造产品的Create函数...

《大话设计模式》num01---简单工厂模式

之前看过本书几个设计模式了已经,也写了代码进行练习,今日蓦然发现好生疏,忘得也差不多了,就想着再回顾下,顺便在博客中稍微记录下要点 或者心得。希望坚持下去,弄成一个知识点系列吧,以后回顾可以直接翻看自...

23中设计模式01----简单工厂模式

基本简介编辑 从设计模式的类型上来说,简单工厂模式是属于创建型模式,又叫做静态工厂方法(Static Factory Method)模式,但不属于23种GOF设计模式之一。简单工厂模式是由一个工...

Java与设计模式(01)--简单工厂模式

简单工厂模式的思想很简单:根据传入的参数,工厂的produce()方法创建不同类的对象。 首先,由于创建出来的对象分数不同的Class,所以这些Class都应该inherit一个parent...

设计模式01之 简单工厂模式(创建模式)

声明:本文转自:设计模式01之 简单工厂模式(创建模式)本章介绍”简单工厂模式”。(01) 本文是在《Java与模式》的学习总结文章! (02) 文章中的UML的相关内容(包括类图说明和绘图工具等)...
  • kxs109
  • kxs109
  • 2017年03月06日 09:31
  • 88

简单工厂模式-C++实现

定义:简单工厂模式是由一个工厂对象决定创建出哪一种产品类的实例。用法如定义所说,由于工厂内集中了所有的实例创建逻辑,违反了类高内聚原则,所以并不是主要的设计模式。 UML图: 具体实现: 主函数: ...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:C++ 01简单工厂模式
举报原因:
原因补充:

(最多只允许输入30个字)