UML类图
初步理解
有多种策略,原本是在一个类中用if else实现,现在每一种策略都封装到类中。主要为了解决在有多种算法相似的情况下,使用 if...else 会比较复杂以及难以维护。
代码理解
底层接口
public interface Strategy { public int operation(int num1, int num2); }
多个策略封装成类(3个)
public class Add implements Strategy{ @Override public int operation(int num1, int num2) { return num1 + num2; } } public class Subtract implements Strategy{ @Override public int operation(int num1, int num2) { return num1 - num2; } } public class Multiply implements Strategy{ @Override public int operation(int num1, int num2) { return num1 * num2; } }
策略类
里面直接附带一个接口属性。初始化时,通过传入的对象(多态),了解应该调用哪种策略。
public class Context { private Strategy strategy; //构造函数 public Context(Strategy strategy){ this.strategy = strategy; } public int selcect(int num1, int num2){ return strategy.operation(num1, num2); } }
测试方法
public class Demo { public static void main(String[] args) { Context context = new Context(new Add()); System.out.println("10 + 5 = " + context.selcect(10, 5)); context = new Context(new Subtract()); System.out.println("10 - 5 = " + context.selcect(10, 5)); context = new Context(new Multiply()); System.out.println("10 * 5 = " + context.selcect(10, 5)); } }
测试结果
10 + 5 = 15 10 - 5 = 5 10 * 5 = 50
总结
三个策略本来可以放在一个类中,用逻辑if else判断,但是为了后期方便维护,将策略封装成一个个的类,然后利用多态,去实现一个策略类的对象,可以根据传入的参数,选择对应的策略类对象,并调用对应的方法。