大话设计模式之简单工厂模式C++实现

博客中的例题及构建思想均来自于程杰老师的“大话设计模式”。
通过封装,继承,多态把程序的耦合度降低,使得程序更加灵活,易于修改且易于重复。
考虑一个用单独的类来创造实例的过程,这就是工厂。

实现简单的四则运算过程:

#include<iostream>

using namespace std;

class Operation {
private:
	double _NumA;
	double _NumB;
public:
	void SetNumA() {
		cout << "Enter a double number: ";
		if (!(cin >> _NumA))
			throw "It must be a number!";
	}

	double GetNumA() {
		return _NumA;
	}

	void SetNumB() {
		cout << "Enter a double number: ";
		if (!(cin >> _NumB))
			throw "It must be a number!";
	}

	double GetNumB() {
		return _NumB;
	}

	virtual double GetResult() {
		int result = 0;
		return result;
	}
};

class OperationAdd:public Operation {
public:
	double GetResult() {
		double result = GetNumA() + GetNumB();
		return result;
	}
};

class OperationSub :public Operation {
public:
	double GetResult() {
		double result = GetNumA() - GetNumB();
		return result;
	}
};

class OperationMul :public Operation {
public:
	double GetResult() {
		double result = GetNumA()*GetNumB();
		return result;
	}
};

class OperationDiv : public Operation {
public:
	double GetResult() {
		if (GetNumB() == 0) {
			throw "The divisor cannot be 0";
		}
		double result = GetNumA() / GetNumB();
		return result;
	}
};

class OperatorFactory {
public:
	Operation* CreatOperation(char s) {
		Operation *ope = nullptr;
		switch (s)
		{
		case '+':
			ope = new OperationAdd;
			break;
		case '-':
			ope = new OperationSub;
			break;
		case '*':
			ope = new OperationMul;
			break;
		case '/':
			ope = new OperationDiv;
			break;
		default:
			throw "Error input operator!";
			break;
		}
		return ope;
	}

};

int main() {
	OperatorFactory fac;
	cout << "Choose an operation: ";
	char temp;
	cin >> temp;
	try {
		Operation* oper = fac.CreatOperation(temp);
		oper->SetNumA();
		oper->SetNumB();
		double result = 0;
		result = oper->GetResult();
		cout << "Result is: " << result << endl;
	}
	catch(const char* err){
		cerr << err << endl;
		exit(EXIT_FAILURE);
	}
	return 0;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值