纵有疾风起
人生不言弃

设计模式十六–策略模式

定义

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

策略模式角色

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.jianshu.com/p/e1d17abec158

原著是一个有趣的人,若有侵权,请通知删除

未经允许不得转载:起风网 » 设计模式十六–策略模式
分享到: 生成海报

评论 抢沙发

评论前必须登录!

立即登录