java设计模式笔记

设计模式十六--策略模式

2019-02-19  本文已影响11人  朽木亦自雕

定义

策略模式的定义:定义一组算法,将每个算法都封装起来,并且使他们之间可以相互转换。

策略模式角色

1:环境角色(Context)
该角色也叫上下文角色,起到承上启下的作用,屏蔽高层模块对策略、算法的直接访问,它持有一个Strategy类的引用。

public class Context{
      private Strategy strategy = null;
      //构造函数
      public Context(Strategy strategy){
          this.strategy = strategy;
      }
      //调用策略方法
      public void contextInterface(){
          this.strategy.strategyInterface();
      }

}

2:抽象策略角色(Strategy)
该角色对策略、算法进行抽象,通常定义每个策略或算法必须具有的方法和属性。

public abstract class Strategy{
      public abstract void strategyInterface();
}

3:具体策略(Concrete Strategy)
该角色实现抽象策略中的具体操作,含有具体的算法。

public class ConcreteStrategy extends Strategy{
      @Override
      public void strategyInterface(){
          System.out.println("Strategy.strategyInterface()  was called")
      }  
}

优点

1:策略模式提供了管理相关算法族的办法。
2:策略模式提供了可以替换继承关系的办法。
3:使用策略模式可以避免使用多重条件转移。

缺点

1:客户端必须知道所有的策略类,并自行决定使用哪一个策略类。
2:策略模式造成有很多个策略类。

应用场景

1:多个类只是在算法或者行为上略有不同的场景。
2:算法需要自由切换的场景。
3:需要屏蔽算法规则的场景。

参考文献:设计模式(java)

上一篇下一篇

猜你喜欢

热点阅读