《设计模式之禅》读书笔记-策略模式

策略模式(Strategy Pattern):

定义一组算法,将每个算法都封装起来,并且使他们之间可以互换。

对于策略模式来说了解清楚它三个角色的作用,基本就差不多了。

策略模式的三个角色:

  • Context封装角色

    它也叫做上下文角色,起承上启下封装作用,屏蔽高层模块对策略、算法的直接访问,封装可能存在的变化。

  • Strategy抽象角色

    策略、算法家族的抽象,通常为接口,定义每个策略或算法必须具有的方法和属性。

  • ConcreteStrategy具体策略角色

    实现抽象策略中的操作,含有具体的算法,即具体的策略实现。

    下面是代码实现

package com.jd.current.strategy;

/**
 * 抽象的策略角色
 * @author zhengxun
 * @version 2017-05-06
 */
public interface Strategy {

    public void doSomething();
}

 

package com.jd.current.strategy;

/**
 * 抽象的策略角色
 * @author zhengxun
 * @version 2017-05-06
 */
public interface Strategy {

    public void doSomething();
}

 

package com.jd.current.strategy;

/**
 * 具体的策略1
 * @author zhengxun
 * @version 2017-05-06
 */
public class ConcreteStrategy1 implements Strategy{
    public void doSomething() {
        System.out.println("策略1");
    }
}

 

package com.jd.current.strategy;

/**
 * 具体的策略2
 * @author zhengxun
 * @version 2017-05-06
 */
public class ConcreteStrategy2 implements Strategy{
    public void doSomething() {
        System.out.println("策略2");
    }
}
 
package com.jd.current.strategy;

/**
 * 封装角色
 * @author zhengxun
 * @version 2017-05-06
 */
public class Context {

    private Strategy strategy = null;

    public Context(Strategy strategy) {
        this.strategy = strategy;
    }

    public void doSometing(){
        this.strategy.doSomething();
    }
}

 

策略模式的优点

  • 算法可以自由切换

只要实现抽象策略,就可以通过Context对其进行调用

  • 避免使用多重条件判断
  • 扩展性良好

添加一个策略仅仅实现接口就可以了

策略模式的缺点

  • 策略类数量增多
  • 所有的策略类都需要对外暴露

策略模式的使用场景

  • 多个类只有在算法和行为上稍有不同的场景。

例如某些if 条件判断 switch 判断,如果判断条件内执行代码过多就可以拿到策略模式来做

  • 算法需要自由切换的场景。

这个比较好理解,指的是具体用那种策略是根据入参来决定的

  • 需要屏蔽算法规则的场景。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值