C++主题——策略模式
来源:互联网 发布:mac 安全设置偏好 编辑:程序博客网 时间:2024/05/22 06:39
C++主题——策略模式
与模板方法模式类似,策略模式也是对一些算法的调度,只不过这些算法是同类型算法,而不像模板
方法模式那样是一些不同类型算法的一种顺序上的调度。模板方法像是围棋中的布局阶段,策略模式更像
是接下来的实战。针对不同的事情应用不同的策略完成相同的结果,这是策略。
模板方法模式定义了一个算法的骨架,把实现交给派生类具体实现,用户不必知道怎么实现,因为他
已经被封装在一个不能改变的函数里了(非虚函数)。
策略模式为了适应不同的需求,只把变化点封装了,这个变化点就是实现不同需求的算法,但是,用
户需要知道各种算法的具体情况,就像warcraft中步兵克枪兵,枪兵克龙鹰一样,要求用户在正确的时机
调用正确的算法。
比如说计算加班工资的一个小程序,对不同的情况要有不同的计算方法,普通加班一倍工资,周末加
班两倍工资,节假日加班三倍工资一样,计算类型CalcWage派生出三种类型Normal/WeekDay/FeastDay,
他们分别实现了计算本身时段加班工资的方法。
{
public:
Wage(CalcWage* ptrCalcWage) : m_ptrCalcWage(ptrCalcWage)
{......}
double GetWage()
{
return m_ptrCalcWage ->CalculageWage();
}
private:
CalcWage* m_ptrCalcWage;
};
Class CalcWage
{
public:
virtual double CalculageWage(......) = 0;
};
Class CalcWageNormal
{
public:
double CalculageWage(......) ;
};
Class CalcWageWeekDay
{
public:
double CalculageWage(......) ;
};
Class CalcWageFeastDay
{
public:
double CalculageWage(......) ;
};
//使用时:
Wage(new CalcWageNormal);
Wage(new CalcWageWeekDay);
Wage(new CalcWageFeastDay);
在使用CalcWage的类型Wage中,保存了一个CalcWage的指针,在需要的时候传递给它不同的子类型。
这其实造成了用户的一种负担,在消除程序员编码维护时的负担后,要求该类型的用户(可能是程序言自己)
在使用期通过调用确定正确的算法,而不是在这里通过一个基类型的指针实现多态,这个调用多态的行为在
算法的抽象类(CalcWage)里,而不是包含算法的使用类(Wage)里。但是另一方面,达到了复用其他代
码的要求,毕竟一组算法是很相似的,要求接口也相同,如果把整个外部类型(包含该算法的类型Wage)抽
象后派生,很多部分是重复的。
那天baidu了一篇云风大侠对C++实现模式的不便之处的感想,后来看了boost::function,觉得C++其
实也还是不错的,不过自己还是新手,体会不深。有兴趣的朋友可以看看Effective C++的第35条,有简略的介
绍。
希望C++越来越好:)
- C++主题——策略模式
- C++主题——策略模式
- 策略模式——商城营销(C++,Qt版)
- 策略模式—笔记
- 设计模式—策略模式
- 设计模式—策略模式
- 设计模式—策略模式
- 设计模式—策略模式
- 设计模式—策略模式
- 设计模式—策略模式
- 设计模式—策略模式
- 设计模式—策略模式
- 设计模式—策略模式
- 设计模式—策略模式
- 设计模式—策略模式
- 设计模式—策略模式
- 策略模式(c++)
- 策略模式(C语言版)
- 反病毒小知识:木马破坏方式及木马采用的伪装方法
- Blog外挂之:热门文章与导航栏
- C++代码优化方法总结
- 请各位大侠帮忙看看我编的程序可行吗,
- BPEL and Java
- C++主题——策略模式
- kdevelop在ubuntu下安装汉化过程
- const的思考
- 最近在用wsad进行开发,收集了一些资料!
- [转]php.ini中文解释
- 如何将RichTextBox中的RTF格式的文档以二进制形式存入数据库中??
- 留学联接
- 一个三流学校的程序员的奋斗
- javascript动态添加表格数据行,ASP后台数据库保存例子