java实现策略模式
创建策略接口
public interface Calculate {public int operation(int a, int b);}
实现接口
加法策略
@Component
public class AddCalculate implements Calculate {@Overridepublic int operation(int a, int b) {return a + a;}
}
减法策略
@Component
public class SubCalculate implements Calculate {@Overridepublic int operation(int a, int b) {return a - a;}
}
策略实现类
在springboot中,对于添加了 @Autowired 的map会自动将实现类注入到map中,key是beanid,value是注入的对象实例
@Component
public class CalculateFactory {@Autowiredprivate 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);}}
使用
@RestController
@RequestMapping("/demo")
public class DemoController {@Autowiredprivate CalculateFactory calculateFactory;@GetMapping("/calculate")public int calculate() throws Exception {return calculateFactory.calculate("addCalculate", 1, 1);}}