美文网首页java设计模式笔记
设计模式十六--策略模式

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

作者: 朽木亦自雕 | 来源:发表于2019-02-19 17:31 被阅读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)

    相关文章

      网友评论

        本文标题:设计模式十六--策略模式

        本文链接:https://www.haomeiwen.com/subject/sozqlqtx.html