您当前的位置: 首页 > 

梁云亮

暂无认证

  • 3浏览

    0关注

    1211博文

    0收益

  • 0浏览

    0点赞

    0打赏

    0留言

私信
关注
热门博文

策略设计模式

梁云亮 发布时间:2022-03-23 16:07:22 ,浏览量:3

引子
public class DemoTest {
    public static int cal(Integer num1, Integer num2, String op) {
        switch (op) {
            case "+":
                return num1 + num2;
            case "-":
                return num1 - num2;
            case "*":
                return num1 * num2;
            case "/":
                return num1 / num2;
            case "%":
                return num1 % num2;
            default:
                throw new RuntimeException("operation error");
        }
    }

    public static void main(String[] args) {
        System.out.println(cal(10, 5, "+"));
        System.out.println(cal(10, 5, "-"));
        System.out.println(cal(10, 5, "*"));
        System.out.println(cal(10, 5, "/"));
        System.out.println(cal(10, 5, "%"));
    }
}

存在问题:每次增加功能,都需要修改已有的代码

基本实现
  • 类图 在这里插入图片描述
  • 接口
public interface Calculator {
    int cal(Integer num1,Integer num2);
}
  • 上下文
public class CalculatorContext {
    private Calculator calculator;

    public CalculatorContext() {
    }

    public CalculatorContext(Calculator calculator) {
        this.calculator = calculator;
    }

    public void setCalculator(Calculator calculator) {
        this.calculator = calculator;
    }

    public int cal(Integer num1, Integer num2){
        int res = calculator.cal(num1, num2);
        return res;
    }
}
  • 具体功能实现类
public class AddCalculator implements Calculator{
    @Override
    public int cal(Integer num1, Integer num2) {
        return num1+num2;
    }
}
public class SubCalculator implements Calculator{
    @Override
    public int cal(Integer num1, Integer num2) {
        return num1 - num2;
    }
}
public class MultiCalculator implements Calculator{
    @Override
    public int cal(Integer num1, Integer num2) {
        return num1*num2;
    }
}
  • 测试代码:
public class DemoTest {
    public static void main(String[] args) {
        CalculatorContext context = new CalculatorContext();

        context.setCalculator(new AddCalculator());
        System.out.println(context.cal(10, 5));

        context.setCalculator(new SubCalculator());
        System.out.println(context.cal(10, 5));

        context.setCalculator(new MultiCalculator());
        System.out.println(context.cal(10, 5));
    }
}
基于lambda实现
  • 原理 在这里插入图片描述
  • 代码
public class DemoTest {
    public static int fun(Integer num1, Integer num2, BiFunction bf) {
        Integer res = bf.apply(num1, num2);
        return res;
    }

    public static void main(String[] args) {
        System.out.println(fun(100, 20, (num1, num2) -> num1 + num2));
        System.out.println(fun(100, 20, (num1, num2) -> num1 - num2));
        System.out.println(fun(100, 20, (num1, num2) -> num1 * num2));
        System.out.println(fun(100, 20, (num1, num2) -> num1 / num2));
    }
}
关注
打赏
1665409997
查看更多评论
立即登录/注册

微信扫码登录

0.0964s