C++主题——策略模式

    与模板方法模式类似,策略模式也是对一些算法的调度,只不过这些算法是同类型算法,而不像模板
方法模式那样是一些不同类型算法的一种顺序上的调度。模板方法像是围棋中的布局阶段,策略模式更像
是接下来的实战。针对不同的事情应用不同的策略完成相同的结果,这是策略。

        模板方法模式定义了一个算法的骨架,把实现交给派生类具体实现,用户不必知道怎么实现,因为他
已经被封装在一个不能改变的函数里了(非虚函数)。
        策略模式为了适应不同的需求,只把变化点封装了,这个变化点就是实现不同需求的算法,但是,用
户需要知道各种算法的具体情况,就像warcraft中步兵克枪兵,枪兵克龙鹰一样,要求用户在正确的时机
调用正确的算法。

       比如说计算加班工资的一个小程序,对不同的情况要有不同的计算方法,普通加班一倍工资,周末加
班两倍工资,节假日加班三倍工资一样,计算类型CalcWage派生出三种类型Normal/WeekDay/FeastDay,
他们分别实现了计算本身时段加班工资的方法。

代码:

Class Wage
...{
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)抽
象后派生,很多部分是重复的。


本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/xscarlet/archive/2007/05/14/1608693.aspx

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值