业务代码里边出现很多if else 不同的条件逻辑处理都比较复杂,这样看起来代码显得就比较low了,下面教你如果使用工厂加策略实现,话不多说,直接上代码
1.测试controller
@Autowired
private TestStrategyFactory testStrategyFactory;
@PostMapping("/test")
public void initializationInv(@RequestParam(value = "str") String str){
testStrategyFactory.get(str).test();
}
2.策略工厂类
@Component
public class TestStrategyFactory {
@Autowired
private List<TestStrategy> testStrategyList;
public TestStrategy get(String str) {
return testStrategyList.stream().filter(t -> t.accept(str)).findAny().get();
}
}
3.策略接口
public interface TestStrategy extends IStrategy {
void test();
}
public interface IStrategy {
boolean accept(String a);
}
4.三个具体实现类 TestA TestB TestC
@Component
public class TestA implements TestStrategy {
@Override
public void test() {
System.out.println("这里实现a的具体业务逻辑");
}
@Override
public boolean accept(String a) {
return StringUtils.equals("a", a);
}
}
@Component
public class TestB implements TestStrategy {
@Override
public void test() {
System.out.println("这里实现b的具体业务逻辑");
}
@Override
public boolean accept(String b) {
return StringUtils.equals("b", b);
}
}
@Component
public class TestC implements TestStrategy {
@Override
public void test() {
System.out.println("这里实现c的具体业务逻辑");
}
@Override
public boolean accept(String c) {
return StringUtils.equals("c", c);
}
}
测试结果:
传a: 这里实现a的具体业务逻辑
传b: 这里实现b的具体业务逻辑
传c: 这里实现c的具体业务逻辑