策略模式
作者:互联网
一.小结
-
定义:定义一组算法,将每个算法都封装起来,并且使它们之间可以互换。
-
主要解决:在有多种算法相似的情况下,使用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); } }
标签:策略,num2,int,IOperate,模式,operate,public,num1 来源: https://blog.csdn.net/wangadping/article/details/110406747