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判断,但是为了后期方便维护,将策略封装成一个个的类,然后利用多态,去实现一个策略类的对象,可以根据传入的参数,选择对应的策略类对象,并调用对应的方法。



京公网安备 11010502036488号