#include <string>
#include <iostream>
using namespace std;
class Operation
{
private:
float _NumberA;
float _NumberB;
public:
float GetNumberA()
{
return _NumberA;
}
void SetNumberA(float value)
{
_NumberA = value;
}
float GetNumberB()
{
return _NumberB;
}
void SetNumberB(float value)
{
_NumberB = value;
}
virtual float GetResult()
{
double result = 0;
return result;
}
};
class OperationAdd:public Operation//加法
{
public:
virtual float GetResult()
{
double result = 0;
result = GetNumberA()+GetNumberB();
return result;
}
};
class OperationSub:public Operation//减法
{
public:
virtual float GetResult()
{
double result = 0;
result = GetNumberA()-GetNumberB();
return result;
}
};
class OperationMul:public Operation//乘法
{
public:
virtual float GetResult()
{
double result = 0;
result = GetNumberA() * GetNumberB();
return result;
}
};
class OperationDiv:public Operation//除法
{
public:
virtual float GetResult()
{
double result = 0;
try
{
if(GetNumberB() == 0)
throw runtime_error("number is 0");
else
result = GetNumberA() / GetNumberB();
}catch(const runtime_error &e)
{
cout<<e.what()<<endl;
}
return result;
}
};
class OperationFactory
{
public:
static Operation *CreateOperation(char operate)
{
Operation *oper = NULL;
switch(operate)//switch 中的参数只能是char,int,等 不能是对象
{
case '+':
oper = new OperationAdd();
break;
case '-':
oper = new OperationSub();
break;
case '*':
oper = new OperationMul();
break;
case '/':
oper = new OperationDiv();
break;
default:
break;
}
return oper;
}
};
int main()
{
Operation *oper;
char m='/';
oper = OperationFactory::CreateOperation(m);
oper->SetNumberA(5);
oper->SetNumberB(0);
double result = oper->GetResult();
cout<<result;
return 0;
}
设计模式学习(1) 简单工厂模式
最新推荐文章于 2024-09-07 23:18:41 发布