#define _CRT_SECURE_NO_WARNINGS
/*
@简单工厂模式
@作用
主要用于创建对象,添加新类时不会影响之前的代码
根据不同的条件产生不同的类,然后根据不同类的虚函数得到不同的结果
@优点
适用于不同的类创建不同的类时
@缺点
客户端必须知道基类和工厂类
*/
#include<iostream>
using namespace std;
//基类
class COperation
{
public:
double m_dFirst;
double m_dSecond;
public:
virtual double GetResult()
{
double dResult = 0;
return dResult;
}
};
//加法
class AddOperation : public COperation
{
public:
virtual double GetResult()
{
return m_dFirst+m_dSecond;
}
};
//减法
class SubOperation : public COperation
{
public:
virtual double GetResult()
{
return m_dFirst-m_dSecond;
}
};
//工厂类
class CCalculatorFactory
{
private:
//COperation *_oper = nullptr;
public:
static COperation* Create(char cOper)
{
COperation *_oper = nullptr;
switch (cOper)
{
case '+':
_oper = new AddOperation();
break;
case'-':
_oper = new SubOperation();
break;
default:
break;
}
return _oper;
}
static void Release(COperation *oper)
{
if (oper != nullptr)
{
delete oper;
}
}
};
int main(int argc, char **argv)
{
int a, b;
cin >> a >> b;
COperation *op = CCalculatorFactory::Create('+');
op->m_dFirst = a;
op->m_dSecond = b;
cout << op->GetResult() << endl;
CCalculatorFactory::Release(op);
}