概念:
策略模式是指对一系列的算法定义,并将每一个算法封装起来,而且使它们还可以相互替换。策略模式让算法独立于使用它的客户而独立变化。
简单来说,策略模式即是指在程序运行的时候可以自由地选择一系列算法中的某一个。
如图:
功能类通过替换类中的策略,来执行不同具体实现。下面列出代码:
public class StrategyDemo { public static void main(String[] args) { // 更换策略为strategy1 StrategyContext strategyContext1 = new StrategyContext(new Strategy1()); strategyContext1.executeSay(); // 更换策略为strategy2 StrategyContext strategyContext2 = new StrategyContext(new Strategy2()); strategyContext2.executeSay(); } } // 功能类 class StrategyContext{ private Strategy strategy; public StrategyContext(Strategy strategy) { // 配置不同的策略 this.strategy = strategy; } public void executeSay(){ // 执行策略 strategy.say(); } } // 策略接口 interface Strategy{ public void say(); } // 具体策略1实现 class Strategy1 implements Strategy{ @Override public void say() { System.out.println("executing strategy1"); } } // 具体策略2实现 class Strategy2 implements Strategy{ @Override public void say() { System.out.println("executing strategy2"); } }
main方法的执行结果为:
executing strategy1 executing strategy2
优点:策略模式可以自由地切换算法,解决了多重判断带来地复杂性和难以维护的问题,扩展性良好。
缺点:不过随着策略的增多,夸张的如果超过100个,那么要维护这100个策略就会耗费你大量的工作,也就是常说的策略膨胀的问题。
另外,使用者必须了解所有的策略,以及知道自己要选择什么策略。除了暴露所有具体的功能策略外,使用者必须增加使用成本,沟通成本,降低工作效率等问题。
时间: 2024-11-08 21:23:13