使用C++重写《大话设计模式》中模式实例一(简单工厂模式)

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/qq_34784043/article/details/82925158

题目:输入两个数和运算符,得到 结果。

下面是类图,使用简单工厂模式实现计算器的计算:

下面是 Operation.h程序:

#pragma once

//运算类
class Operation {
private:
	double _numberA;
	double _numberB;

public:
    virtual ~Operation(){}
	void SetNumberA(double value) {
		_numberA = value;
	}
	double GetNumberA() {
		return _numberA;
	}
	void SetNumberB(double value) {
		_numberB = value;
	}
	double GetNumberB() {
		return _numberB;
	}
	virtual double GetResult() {
		double result = 0;
		return result;
	}
};

//加法类
class OperationAdd :public Operation {
public:
    virtual ~OperationAdd(){}
	virtual double GetResult() {
		double result = 0;
		result = GetNumberA() + GetNumberB();
		return result;
	}
};

//减法类
class OperationSub :public Operation {
public:
    virtual ~OperationSub(){}
	virtual double GetResult() {
		double result = 0;
		result = GetNumberA() - GetNumberB();
		return result;
	}
};

//乘法类
class OperationMul :public Operation {
public:
    virtual ~OperationMul(){}
	virtual double GetResult() {
		double result = 0;
		result = GetNumberA() * GetNumberB();
		return result;
	}
};

//除法类
class OperationDiv :public Operation {
public:
    virtual ~OperationDiv(){}
	virtual double GetResult() {
		double result = 0;
		if (GetNumberB() == 0) {
			char str[] = "除数不能为0";
			throw str;
		}
		result = GetNumberA() / GetNumberB();
		return result;
	}
};

下面是 OperationFactory.h程序:

#pragma once
#include "Operation.h"

class OperationFactory {
private:
	Operation* oper;
public:
	double createOperate(char operate, double numberA, double numberB) {
		switch (operate)
		{
		case '+':
			oper = new OperationAdd();
			break;
		case '-':
			oper = new OperationSub();
			break;
		case '*':
			oper = new OperationMul();
			break;
		case '/':
			oper = new OperationDiv();
			break;
		default:
			break;
		}
		oper->SetNumberA(numberA);
		oper->SetNumberB(numberB);
		return oper->GetResult();
	}
	~OperationFactory() {}
};

下面是main.cpp程序:

#include "OperationFactory.h"
#include <iostream>
#include <cstdlib>
using namespace std;

int main() {
	try {
		double result = 0;
		OperationFactory factory;
		result = factory.createOperate('/', 1, 0);
		cout << "1 / 0 = " << result << endl;
	}
	catch (char str[]) {
		cout << str << endl;
	}
	system("pause");
	return 0;
}

 运行结果:

猜你喜欢

转载自blog.csdn.net/qq_34784043/article/details/82925158