大话设计模式01.2 简单工厂模式
2012-07-21 07:20
148 查看
我们在01节中最后提到了"简单计算器"的继承体系中类比较多,如何使用了,不妨参考简单工厂模式,即引入了CreateOperator类,将类的创建过程也打包封装起来,则UML变为:
如此修改的好处:
1. 可维护性:修改某一种算法,仅需修改某一个类即可
2. 灵活性:如果需要增加一种算法,仅需要增加新的类即可
3. 业务和表现分离:可给多种展示层提供算法支持
整体代码演变为:
#include
<iostream>
using
namespace std;
class
Operator{
public:
double
GetResult(double a, double b)=0;
};
class
OperatorAdd : public
Operator{
public:
double
GetResult(double a, double b) {
return a+b;
}
};
class
OperatorSub: public
Operator{
public:
double
GetResult(double a, double b) {
return a-b;
}
};
class
OperatorMul: public
Operator{
public:
double
GetResult(double a, double b) {
return a*b;
}
};
class
OperatorDiv: public
Operator{
public:
double
GetResult(double a, double b) {
return a/b;
}
};
class
CreateOperator{
public:
static
Operator* createOperator(char oper)
{
switch(oper) {
case
'+': return
new OperatorAdd();
break;
case
'-': return
new OperatorSub();
break;
case
'*': return
new OperatorMul();
break;
case
'/': return
new OperatorDiv();
break;
}
return NULL;
}
};
int
main(void) {
double numA, numB;
char oper;
cin >> numA >> oper >> numB;
cout << "Result of " << numA << oper << numB << "="
<< CreateOperator::createOperator(oper)(numA, numB);
return 0;
}
如此修改的好处:
1. 可维护性:修改某一种算法,仅需修改某一个类即可
2. 灵活性:如果需要增加一种算法,仅需要增加新的类即可
3. 业务和表现分离:可给多种展示层提供算法支持
整体代码演变为:
#include
<iostream>
using
namespace std;
class
Operator{
public:
double
GetResult(double a, double b)=0;
};
class
OperatorAdd : public
Operator{
public:
double
GetResult(double a, double b) {
return a+b;
}
};
class
OperatorSub: public
Operator{
public:
double
GetResult(double a, double b) {
return a-b;
}
};
class
OperatorMul: public
Operator{
public:
double
GetResult(double a, double b) {
return a*b;
}
};
class
OperatorDiv: public
Operator{
public:
double
GetResult(double a, double b) {
return a/b;
}
};
class
CreateOperator{
public:
static
Operator* createOperator(char oper)
{
switch(oper) {
case
'+': return
new OperatorAdd();
break;
case
'-': return
new OperatorSub();
break;
case
'*': return
new OperatorMul();
break;
case
'/': return
new OperatorDiv();
break;
}
return NULL;
}
};
int
main(void) {
double numA, numB;
char oper;
cin >> numA >> oper >> numB;
cout << "Result of " << numA << oper << numB << "="
<< CreateOperator::createOperator(oper)(numA, numB);
return 0;
}
相关文章推荐
- 读《大话设计模式》笔记之一——简单工厂模式
- 大话设计模式学习--简单工厂模式
- 大话设计模式感悟(2)——简单工厂模式(Simple Factory)
- 大话设计模式学习 策略和简单工厂模式结合
- 《大话设计模式》——简单工厂模式
- 大话设计模式C++版——简单工厂模式
- 简单工厂模式C++代码示例---《大话设计模式》笔记
- 《大话设计模式》笔记-模式0 简单工厂模式
- 大话设计模式C++版——简单工厂模式
- 大话设计模式 第一章 简单工厂模式 C++实现
- 大话设计模式:简单工厂模式
- 大话设计模式 简单工厂模式
- <一>读<<大话设计模式>>之简单工厂模式
- 读前辈的大话设计模式(一)之简单工厂模式,抒自己的读后感
- 读《大话设计模式》——简单工厂模式(一)
- 2009-03-09读书记录:《大话设计模式》第一章——简单工厂模式
- 《大话设计模式》代码JAVA版-第1章 简单工厂模式
- 大话设计模式_简单工厂模式
- 《大话设计模式》——读后感 (1)代码无错就是优?——简单工厂模式
- 笔记-大话设计模式-01 简单工厂模式