设计模式:简单工厂模式 c++实现

本文介绍了简单工厂模式,通过一个具体的例子展示了如何利用这种设计模式实现一个简单的计算器。计算器支持加、减、乘、除四种运算,通过工厂类根据输入的运算符动态创建相应的运算对象。虽然简单工厂模式易于理解,但在实际应用中可能会因为新增运算类型而增加大量switch-case代码,因此在某些情况下可能不是最佳选择。
摘要由CSDN通过智能技术生成

前言

这里简单介绍下简单工厂模式,并用该模式实现简单计算器功能。


简单工厂模式的理解

简单工厂模式,就是将创建不同对象的过程在一个专门的类中来实现,我们称这个类为工厂类,用户只需要传入对应的参数就可以获得相应的类的对象。

c++简单计算器实现

类图(引用《大话设计模式》简单工厂模式类图)如下图所示:
在这里插入图片描述

#include <iostream>
#include <memory>

class Operations
{
private: 
	double number1;
	double number2;

public:
	Operations() {}
	Operations(double num1, double num2) : number1(num1), number2(num2) {}

	void SetNumber1(double num1)
	{
		number1 = num1;
	}

	double GetNumber1()
	{
		return number1;
	}

	void SetNumber2(double num2)
	{
		number2 = num2;
	}

	double GetNumber2()
	{
		return number2;
	}

	virtual double GetResult() = 0;

	virtual ~Operations() {}
};

class OperationsAdd : public Operations {
public:
	virtual double GetResult()
	{
		return GetNumber1() + GetNumber2();
	}
};

class OperationsSubstract : public Operations {
public:
	virtual double GetResult()
	{
		return GetNumber1() - GetNumber2();
	}
};

class OperationsMultiply : public Operations
{
public:
	virtual double GetResult()
	{
		return GetNumber1() * GetNumber2();
	}
};

class OperationsDivision : public Operations
{
public:
	virtual double GetResult()
	{
		return (GetNumber2() == 0 ? DBL_MAX : (GetNumber1() / GetNumber2()));
	}
};

class SimpleFactory {
public:
	static std::shared_ptr<Operations> CreateOperations(const char operation)
	{
		std::shared_ptr<Operations> smartPtr = NULL;

		switch (operation)
		{
		case '+':
			smartPtr = std::make_shared<OperationsAdd>();
			break;
		case '-':
			smartPtr = std::make_shared<OperationsSubstract>();
			break;
		case '*':
			smartPtr = std::make_shared<OperationsMultiply>();
			break;
		case '/':
			smartPtr = std::make_shared<OperationsDivision>();
		default:
			break;
		}

		return std::move(smartPtr);
	}
};

int main()
{
	std::shared_ptr<Operations> ptrOperation = SimpleFactory::CreateOperations('+');
	ptrOperation->SetNumber1(10);
	ptrOperation->SetNumber2(10);

	std::cout << "10 + 10 = " << ptrOperation->GetResult() << std::endl;

	system("pause");
	return 0;
}

总结

其实,简单工厂模式很容易理解,但是个人应用的很少,因为需要添加很多switch … case代码来实现对象的创建,没新增一个类,就要新增一个case分支,个人认为这不是很优秀。

参考

《大话设计模式》

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值