引言
本文主要介绍策略模式的相关内容。主要说明策略模式是什么、怎么用及其对应的优缺点。
- 策略模式介绍
- 代码示例
- 总结
一、策略模式介绍
到底什么是策略模式呢?按照我自己的理解,简单来说就是将具备统一任务属性的一类业务逻辑进行封装,调用方可以根据自身的业务场景和需要,进行策略的业务调用。
通过上图可知,策略模式涉及到的模块主要包括以下三个方面:
1、策略环境:类中包含策略引用;
2、抽象策略:抽象策略公共行为,包含所有策略的接口方法;
3、策略具体实现:封装了策略的不同算法实现;
二、代码示例
1、策略场景
public class StrategyContext { //持有一个具体策略的对象 private Strategy strategy; /** * 构造函数,传入一个具体策略对象 * @param strategy 具体策略对象 */ public StrategyContext(Strategy strategy){ this.strategy = strategy; } /** * 策略方法 */ public void contextInterface(){ strategy.strategyInterface(); } }
2、策略接口
public interface Strategy { /** * 策略方法 */ public void strategyInterface(); }
3、策略实现
public class StrategyA implements Strategy { @Override public void strategyInterface() { //相关的业务 } }
public class StrategyB implements Strategy { @Override public void strategyInterface() { //相关的业务 } }
4、策略使用
public class ContextClient { public static void main(String[] args) { Strategy StrategyA = new StrategyA(); StrategyContext contextA = new StrategyContext(StrategyA ); //调用策略A的执行方法 contextA.contextInterface(); } }
三、总结
策略模式的使用场景为把算法实现进行提取封装,独立于调用场景之外。
策略模式的优点:
1、当业务代码存在多重辑判断时,策略模式可以避免大量的if-else
的判断,避免代码逻辑混乱,增强代码的可维护性;
2、可将策略中的公共部分进行高度抽象,避免代码重复;
策略模式的缺点:
1、调用方必须知道所有的策略实现类,增加了调用方的使用难度;
2、如果判断逻辑较多的话,会导致策略实现类较多;