使用C++重写《大话设计模式》中模式实例一(简单工厂模式)
题目:输入两个数和运算符,得到 结果。
下面是类图,使用简单工厂模式实现计算器的计算:
下面是 Operation.h程序:
#pragma once
//运算类
class Operation {
private:
double _numberA = 0;
double _numberB = 0;
public:
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 double GetResult() {
double result = 0;
result = GetNumberA() + GetNumberB();
return result;
}
};
//减法类
class OperationSub :public Operation {
public:
virtual double GetResult() {
double result = 0;
result = GetNumberA() - GetNumberB();
return result;
}
};
//乘法类
class OperationMul :public Operation {
public:
virtual double GetResult() {
double result = 0;
result = GetNumberA() * GetNumberB();
return result;
}
};
//除法类
class OperationDiv :public Operation {
public:
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() {
if (oper) {
delete oper;
}
}
};
下面是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;
}
运行结果: