面向对象思维:抽象、封装、继承、多态;
实现代码复用,减少代码复制;
实现松耦合,减少紧耦合;
简单工厂模式:采用一个单独的类,来创建实例化的过程
// 采用简单工厂模式,实现一个简单的计算器
// 参考《大话设计模式》
#include <iostream>
#include <exception>
using namespace std;
class Operation
{
public:
Operation()
{}
virtual double getValue(double x, double y) = 0;
};
class Addition : public Operation
{
public:
Addition()
{}
double getValue(double x, double y)
{
return x + y;
}
};
class Substract : public Operation
{
public:
Substract()
{}
double getValue(double x, double y)
{
return x - y;
}
};
class Multiply : public Operation
{
public:
Multiply()
{}
double getValue(double x, double y)
{
return x *y;
}
};
class Divide : public Operation
{
public:
Divide()
{}
double getValue(double x, double y)
{
if (y == 0)
{
throw runtime_error("Divide by zero!");
}
return x / y;
}
};
class SimpleFacotry
{
public:
SimpleFacotry()
{
}
Operation * getOperator(char c)
{
switch (c)
{
case('+'):
return new Addition();
break;
case('-'):
return new Substract();
break;
case('*'):
return new Multiply();
break;
case('/'):
return new Divide();
break;
default:
throw std::runtime_error("wrong input");
break;
}
}
};
int main()
{
SimpleFacotry factory;
Operation * pAdd = factory.getOperator('+');
cout << pAdd->getValue(1, 2) << endl;
return 0;
}