java实现策略模式

创建策略接口

java 复制代码
public interface Calculate {

    public int operation(int a, int b);

}

实现接口

加法策略

java 复制代码
@Component
public class AddCalculate implements Calculate {
    @Override
    public int operation(int a, int b) {
        return a + a;
    }
}

减法策略

java 复制代码
@Component
public class SubCalculate implements Calculate {
    @Override
    public int operation(int a, int b) {
        return a - a;
    }
}

策略实现类

在springboot中,对于添加了 @Autowired的map会自动将实现类注入到map中,key是beanid,value是注入的对象实例

java 复制代码
@Component
public class CalculateFactory {

    @Autowired
    private Map<String, Calculate> calculateMap;

    public int calculate(String calculate, int a, int b) throws Exception {
        return Optional.ofNullable(calculateMap.get(calculate))
                .orElseThrow(() -> new RuntimeException("异常")).operation(a, b);
    }

}

使用

java 复制代码
@RestController
@RequestMapping("/demo")
public class DemoController {

    @Autowired
    private CalculateFactory calculateFactory;

    @GetMapping("/calculate")
    public int calculate() throws Exception {
        return calculateFactory.calculate("addCalculate", 1, 1);
    }

}
相关推荐
從南走到北3 分钟前
JAVA国际版同城跑腿源码快递代取帮买帮送同城服务源码支持Android+IOS+H5
android·java·ios·微信小程序
q***09806 分钟前
Spring Boot 2.7.x 至 2.7.18 及更旧的版本,漏洞说明
java·spring boot·后端
q***146417 分钟前
oracle 12c查看执行过的sql及当前正在执行的sql
java·sql·oracle
好好研究1 小时前
SpringMVC框架 - 获取请求参数常用的注解
java·spring·mvc
c***93771 小时前
springboot使用logback自定义日志
java·spring boot·logback
阿波罗尼亚1 小时前
Head First设计模式(六) 设计原则 命令模式
设计模式·命令模式
七夜zippoe1 小时前
JVM调优实战:从GC日志分析到参数配置(Xmx, Xms, XX:+)
java·jvm·gc·jit·垃圾回收器
这不小天嘛2 小时前
多模态智能对话系统-后端开发
java
2509_940880222 小时前
springboot集成onlyoffice(部署+开发)
java·spring boot·后端
切糕师学AI2 小时前
Spring 中的 @Service 注解
java·spring