简介
其实我一开始研究ifelse优化参考了这篇blog
点击跳转
其中的思路和代码的部分都是是很清晰的,但是即使源码也不能正常运行出业务代码部分,没有报错。
我仔细一看这是基于Spring环境的,所以我做了一些修改,正确的输出了结果。
这里分享给大家:
与大家共勉~~
目录结构
代码
基础接口
serviceI
package day0127.ifelseOptimization;
/**
* @Author: Braylon
* @Date: 2020/1/26 21:37
* @Version: 1.0
*/
public interface serviceI {
void Business1();
void Business2();
}
service类
package day0127.ifelseOptimization.services;
import day0127.ifelseOptimization.serviceI;
import day0127.ifelseOptimization.strategyFactory;
import org.springframework.beans.factory.InitializingBean;
import org.springframework.stereotype.Component;
/**
* @Author: Braylon
* @Date: 2020/1/26 21:40
* @Version: 1.0
*/
@Component
public class service01 implements serviceI, InitializingBean {
@Override
public void Business1() {
System.out.println("service01: code1");
}
@Override
public void Business2() {
System.out.println("service01: code2");
}
@Override
public void afterPropertiesSet() throws Exception {
strategyFactory.register("01", this);
}
}
package day0127.ifelseOptimization.services;
import day0127.ifelseOptimization.serviceI;
import day0127.ifelseOptimization.strategyFactory;
import org.springframework.beans.factory.InitializingBean;
import org.springframework.stereotype.Component;
/**
* @Author: Braylon
* @Date: 2020/1/26 21:42
* @Version: 1.0
*/
@Component
public class service02 implements serviceI, InitializingBean {
@Override
public void Business1() {
System.out.println("service02: code1");
}
@Override
public void Business2() {
System.out.println("service02: code2");
}
@Override
public void afterPropertiesSet() throws Exception {
strategyFactory.register("service02",this);
}
}
配置类
package day0127.ifelseOptimization;
import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.Configuration;
/**
* @Author Braylon
* @Date 2020/1/25 21:15
*/
@Configuration
@ComponentScan("day0127.ifelseOptimization")
public class conf {
public void run(String state) {
serviceI run = strategyFactory.getBusiness(state);
run.Business2();
run.Business1();
}
}
策略工厂类
package day0127.ifelseOptimization;
import lombok.NoArgsConstructor;
import java.util.HashMap;
import java.util.Map;
/**
* @Author: Braylon
* @Date: 2020/1/26 21:44
* @Version: 1.0
*/
public class strategyFactory {
private static Map<String, serviceI> map = new HashMap<>();
private static final serviceI EMPITY = new EMPITYMethod();
private strategyFactory() {}
public static serviceI getBusiness(String state) {
serviceI result = map.get(state);
return result == null ? EMPITY : result;
}
public static void register(String state, serviceI I) {
map.put(state, I);
}
private static class EMPITYMethod implements serviceI {
@Override
public void Business1() {
}
@Override
public void Business2() {
}
}
}
test
package day0127.ifelseOptimization;
import org.springframework.context.annotation.AnnotationConfigApplicationContext;
/**
* @Author: Braylon
* @Date: 2020/1/26 22:05
* @Version: 1.0
*/
public class test {
public static void main(String[] args) {
AnnotationConfigApplicationContext context = new AnnotationConfigApplicationContext(conf.class);
conf bean = context.getBean(conf.class);
bean.run("01");
}
}