设计模式-----------策略模式

一:介绍

策略模式定义了算法族,继承相同的接口,分别封装起来,让他们能够相互替换。以此来达到运行时更改算法。此模式让算法的变化独立于使用算法的客户。

二:设计原则

1.找出应用中可能变化之处,把他们独立出来,不要和那些不需要变化的代码混在一块。
2.针对接口编程,而不是针对实现编程。
3.多用组合,少用继承。

三:实战

场景:计算器的加减乘除

1.定义抽象方法用来表示计算

public interface Strategy {

    public int doOperation(int num1, int num2);
}

2.定义策略角色
加法:

public class AdditionStrategy implements Strategy {

    @Override
    public int doOperation(int num1, int num2) {
        return num1 + num2;
    }
}

减法:

public class SubtrationStrategy implements Strategy {
    @Override
    public int doOperation(int num1, int num2) {
        return num1 - num2;
    }
}

省略乘法和除法。。。。。。。。。。。。。。。。。。

3.定义计算器

public class Calculator {
    private Strategy strategy;

    public Calculator(Strategy strategy) {
        this.strategy = strategy;
    }

    public int operation(int num1, int num2) {
        return strategy.doOperation(num1, num2);
    }
}

4.测试:用户可根据实际需要选择计算器来实现自己算法

public class Application {

    public static void main(String[] args) throws InstantiationException, IllegalAccessException {
        int num1 = 100;
        int num2 = 10;
        Calculator calculator = new Calculator(new AdditionStrategy());
        System.out.println("people正在做加法" + calculator.operation(num1, num2));

        Calculator calculator2 = new Calculator(new SubtrationStrategy());
        System.out.println("people2正在做加法" + calculator2.operation(num1, num2));
    }
}

四:总结
使用策略模式,能够在运行时选择算法。当然,缺点也很明显,如果实现类过多,会导致过于臃肿。。

猜你喜欢

转载自blog.csdn.net/qq_38661798/article/details/85242313
今日推荐