策略模式

一、简介

在策略模式(Strategy Pattern)中,一个类的行为或其算法可以在运行时更改。

这种就相当于传一段代码到系统中,类似Lambda传一段代码进去运行。

可以从外部传递要执行的策略,或者在配置文件中配置对应的策略。

二、类图

三、代码实现

3.1 接口

public interface Strategy {
    int calculate(int num1,int num2);
}

3.2 策略

public class AddStrategy implements Strategy{
    @Override
    public int calculate(int num1, int num2) {
        return num1+num2;
    }
}
public class SubtractsStrategy implements Strategy {
    @Override
    public int calculate(int num1, int num2) {
        return num1-num2;
    }
}
public class MultiplyStrategy implements Strategy{
    @Override
    public int calculate(int num1, int num2) {
        return num1*num2;
    }
}

3.3 context类

public class Context {

    private Strategy strategy;

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

    public int excuteStrategy(int num1, int num2){
       return strategy.calculate(num1, num2);
    }
}

3.4 测试类

public class StrategyPatternDemo {

    public static void main(String[] args) {
        Context addContext = new Context(new AddStrategy());
        int addRes = addContext.excuteStrategy(11, 22);
        System.out.println("addRes = " + addRes);

        Context subContext = new Context(new SubtractsStrategy());
        int subRes = subContext.excuteStrategy(20, 9);
        System.out.println("subRes = " + subRes);

        Context mulContext = new Context(new MultiplyStrategy());
        int mulRes = mulContext.excuteStrategy(20, 9);
        System.out.println("mulRes = " + mulRes);

        //lambda表达式传段策略
        Context divContext = new Context((int num1, int num2)-> num1/num2);
        int divRes = divContext.excuteStrategy(20,9);
        System.out.println("divRes = " + divRes);
    }
}
posted @ 2021-03-11 15:53  Matteo-Carati  阅读(39)  评论(0)    收藏  举报