3.策略模式

何时使用:

   

1.封装变化点是面向对象的一个重要思路,就和第一节提到的一样。

2.策略模式:是一种定义一系列算法的模式,这些方法完成的都是相同工作,只是实现不同,该模式可以以相同的接口调用来调用所有的算法和实现,以减少各个算法中的耦合度。

优点:

        1.多个类只在算法实现上不同,可以使用策略模式,在运行时动态选择具体要执行的行为。

        2.算法之前互不影响。

        3.用户不考虑算法实现细节。

如:

class Operate

{

 public:

         virtual void Calculate() = 0;

};

 

class DamageHP :

     public Operate

{

 public:

       int m_nHP;

       void Calaulate(){ m_nHP -= 1; };

};

 

class DamageMP :

     public Operate

{

 public:

       int m_nMP;

       void Calaulate(){ m_nHP -= 5; };

};

 

class Context

{

public:

     Context( Operate _oper ){ oper = _oper; }

 

      // 这里就实现的外部只考虑这个接口就可以了,

      // 这个实现把各种算法都封装在了里面,最后暴露给用户的只用Context和实际算法了。用户不用考虑算法的具体实现。

      void ContextInterface() { oper. Calaulate(); };

private:

     Operate oper;

     

};

 

但是如果使用上面的方法还是未避免客户端判断逻辑的问题,我们这里考虑使用简单工厂模式,就报逻辑算法选择也封装在里面了

class Context

{

public:

     Operate oper;

     Context( inttype )

    { 

         switch( type )

         {

                case 1:

                 {

                      oper = new DamageMP ();

                 }

                 break;

                case 2:

                 {

                      oper = new DamageHP ();

                 }

                 break;

         };

         oper = _oper; 

     }

 

      // 这里就实现的外部只考虑这个接口就可以了,

      // 这个实现把各种算法都封装在了里面,最后暴露给用户的只用Context和实际算法了。用户不用考虑算法的具体实现。

      void ContextInterface() { oper. Calaulate(); };

private:

     Operate oper;

     

};

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值