先看一下策略模式的UML类图:
从类图可以看出,策略模式基本和简单工厂模式没什么区别,从我的理解他们两个最大的区别就是:简单工厂模式是实现对象的多样性,而策略模式适合类中的成员以方法为主;
简单工厂模式只能解决对象创建问题,对于经常变动的算法应使用策略模式。
放代码看看吧:
//策略基类
class COperation
{
public:
int m_nFirst;
int m_nSecond;
virtual double GetResult()
{
double dResult=0;
return dResult;
}
};
//策略具体类—加法类
class AddOperation : public COperation
{
public:
AddOperation(int a,int b)
{
m_nFirst=a;
m_nSecond=b;
}
virtual double GetResult()
{
return m_nFirst+m_nSecond;
}
};
class Context
{
private:
COperation* op;
public:
Context(COperation* temp)
{
op=temp;
}
double GetResult()
{
return op->GetResult();
}
};
//客户端
int main()
{
int a,b;
char c;
cin>>a>>b;
cout<<”请输入运算符:;
cin>>c;
switch(c)
{
case ‘+’:
Context *context=new Context(new AddOperation(a,b));
cout<<context->GetResult()<<endl;
break;
default:
break;
}
return 0;
}
为了方便,我这里只放了一个加法类,你可以自己继承一个减法、乘法等,然后在主函数switch里面添加相关的分类。我想到这里,大家也看到了策略方法的缺点
:将对操作的判断全部放在了客户端,增加了客户的任务。
大家知道,简单工厂模式正好是把判断操作都集中到工厂类里,于是可以想到将两个模式结合,就出现了下面的模式----策略与工厂结合模式,代码在上面代码的基础上修改:
class Context
{
private:
COperation* op;
public:
Context(char cType)
{
switch (cType)
{
case '+':
op=new AddOperation(3,8);
break;
default:
op=new AddOperation();
break;
}
}
double GetResult()
{
return op->GetResult();
}
};
//客户端
int main()
{
int a,b;
cin>>a>>b;
Context *test=new Context('+');
cout<<test->GetResult()<<endl;
return 0;
}
分享到:
相关推荐
设计模式精解-GoF-23种设计模式解析--附C++源代码,帮助理解!
就像在一年前看GoF的《设计模式》一书,和半年前用C++模拟、实现23种经典的设计模式一般,透过这个写解析的过程,我又看到了另外一个境界。一直认为学习的过程很多时候可以这样划分:自己学会一门知识(技术)、表达...
设计模式精解- GoF 23种设计模式解析附C++实现源码 懂了设计模式,你就懂了面向对象分析和设计(OOA/D)的精要。反之好像也可能成立。道可道,非常道。道不远人,设计模式亦然如此。 一直想把自己的学习经验以及在...
c++设计模式-行为型模式-策略模式;qt工程;c++简单源码; 策略(Strategy)模式的定义:该模式定义了一系列算法,并将每个算法封装起来,使它们可以相互替换,且算法的变化不会影响使用算法的客户。策略模式属于...
侯捷系列-全部课件\C++设计模式\C++设计模式
设计模式精解-GoF23种设计模式解析(附C++实现源码)
设计模式精解-GoF23种设计模式解析附C++实现源码,是系统学习设计模式,深入理解每种模式的原型,优缺点,适用的场景,达到灵活运用目的的最好参考书
设计模式-策略模式-c++版 压缩包中有build好的程序和工程设计到的所有类的源码,还有一个Uml类图
C++设计模式--基于Qt4开源跨平台开发框架
设计模式专题之(十六)策略模式---设计模式策略模式示例代码(python--c++)
设计模式专题---设计模式示例代码(全)(python--c++)
使用“推-拉”模式中的“拉”来实现的Observe模式
设计模式专题之(八)适配器模式---设计模式适配器模式示例代码(python--c++)
创建型模式,共五种:工厂方法模式、抽象工厂模式、...行为型模式,共十一种:策略模式、模板方法模式、观察者模式、迭代子模式、责任链模式、命令模式、备忘录模式、状态模式、访问者模式、中介者模式、解释器模式。
设计模式精解-GoF 23种设计模式解析附C++实现源码 常见设计模式的解析和实现(C++)高级资料
1.1 什么是设计模式 2 1.2 Smalltalk MVC 中的设计模式 3 1.3 描述设计模式 4 1.4 设计模式的编目 5 1.5 组织编目 7 1.6 设计模式怎样解决设计问题 8 1.6.1 寻找合适的对象 8 1.6.2 决定对象的粒度 9 1.6.3 指定对象...
设计模式精解- GoF 23 种设计模式解析附 C++实现源码 目 录 0 引言 ...........................................................................................................................................