策略模式+工厂模式+模板模式优化if-else
1.首先创建一个工厂
import java.util.HashMap;
import java.util.Map;
/**
* 工厂设计模式
*/
public class Factory {
private static Map<String,AbstractHandler> strategyMap = new HashMap<>();
public static AbstractHandler getInvokeStrategy(String str){
return strategyMap.get(str);
}
public static void register(String str ,AbstractHandler handler){
if (StringUtils.isEmpty(str)|| null==handler) {
return;
}
strategyMap.put(str, handler);
}
}
2.然后创建一个公共抽象业务类,在这里定义不同的业务
import org.springframework.beans.factory.InitializingBean;
public abstract class AbstractHandler implements InitializingBean {
public void AA(String nikeName) {
throw new UnsupportedOperationException();
}
public void BB(String nikeName) {
throw new UnsupportedOperationException();
}
}
3.实现公共类的方法
import org.springframework.stereotype.Component;
@Component
public class PiQiuHandler extends AbstractHandler{
@Override
public void AA(String nikeName) {
//业务逻辑
System.out.println("我是皮球的业务一");
}
@Override
public void BB(String nikeName) {
//业务逻辑
System.out.println("我是皮球的业务二");
}
@Override
public void afterPropertiesSet() throws Exception {
Factory.register("皮球",this);
}
}
import org.springframework.stereotype.Component;
@Component
public class WoNiuHandler extends AbstractHandler{
@Override
public void AA(String nikeName) {
//业务逻辑
System.out.println("我是蜗牛的业务一");
}
@Override
public void BB(String nikeName) {
//业务逻辑
System.out.println("我是蜗牛的业务二");
}
@Override
public void afterPropertiesSet() throws Exception {
Factory.register("蜗牛",this);
}
}
4.最后测试
import org.junit.jupiter.api.Test;
import org.springframework.boot.test.context.SpringBootTest;
/**
* 用策略模式和工厂模式以及模板方法模式优化代码中的if else
*/
@SpringBootTest
public class Demo {
@Test
public void testHandler(){
String nickName2 = "蜗牛";
AbstractHandler invokeStrategy = Factory.getInvokeStrategy(nickName2);
invokeStrategy.AA(nickName2);
invokeStrategy.BB(nickName2);
}
}
测试结果:
我是蜗牛的业务一
我是蜗牛的业务二
如果if,else多的情况下 为了代码简洁性,可以使用这样的模式去优化代码,不同的种类只需创建不同的实现类就可以。