一.小结
-
定义:定义一组算法,将每个算法都封装起来,并且使它们之间可以互换。
-
主要解决:在有多种算法相似的情况下,使用if…else所带来的复杂和难以维护。
-
优点:1.算法可以自由切换 2.避免使用多重条件判断 3.拓展性好
-
缺点:1.策略类会增多 2.所有策略类都需要对外暴露。
-
注意点:如果一个系统的策略多于四个,就需要考虑使用混合模式,解决策略类膨胀的问题。
-
通用UML图:

二.例子
在学习程序的时候,策略模式的"计算器"十分经典,列举如下:
-
抽离两数运算的算法
public interface IOperate { int operate(int num1, int num2); } -
具体的策略子类
// 加法运算 public class AddOperate implements IOperate { @Override public int operate(int num1, int num2) { return num1 + num2; } } // 减法运算 public class SubOperate implements IOperate { @Override public int operate(int num1, int num2) { return num1 - num2; } } ... -
封装类
// 传入两个数和运算符号,返回结果 public class Calculator { private IOperate operator; public Calculator(IOperate operator) { this.operator = operator; } public int operate(int num1, int num2) { return operator.operate(num1, num2); } } -
情景类
public class Client { public static void main(String[] args) { int num1 = 6, num2 = 3; // 6 + 3 AddOperate addOperate = new AddOperate(); Calculator calc = new Calculator(addOperate); int sum = calc.operate(num1, num2); System.out.printf("%d + %d = %d \n", num1, num2, sum); // 6 - 3 SubOperate subOperate = new SubOperate(); calc = new Calculator(subOperate); int diff = calc.operate(num1, num2); System.out.printf("%d - %d = %d ", num1, num2, diff); } }
本文介绍了策略模式的基本概念,通过创建一组可互换的算法并封装在独立的策略类中,避免了使用复杂的if...else语句。策略模式的主要优点包括算法的自由切换和良好的拓展性,但同时也可能导致策略类的增多和所有策略类的对外暴露。在实际应用中,当策略数量超过四个时,可以考虑使用混合模式来解决膨胀问题。文中以一个简单的计算器为例,展示了如何实现加法和减法操作的策略类,并通过封装类进行调用,实现了根据传入的运算策略执行相应的计算操作。

被折叠的 条评论
为什么被折叠?



