面向對象思維:抽象、封裝、繼承、多態;
實現代碼複用,減少代碼複製;
實現鬆耦合,減少緊耦合;
簡單工廠模式:採用一個單獨的類,來創建實例化的過程
// 採用簡單工廠模式,實現一個簡單的計算器
// 參考《大話設計模式》
#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;
}