目录
具体策略模式和工厂模式,使用这个这两个模式主要是防止程序中出现大量的IF ELSE IF ELSE。
1、工厂类FactoryStrategy负责创建策略的工厂
比较关键的一点是AutoWired一个Map<String, Strategy> 这个会在初始化的时候将所有的Strategy自动加载到Map中,是不是很方便。使用concurrentHashMap是防止多线程操作的时候出现问题。同时还要注意@Service注解。
@Service
public class FactoryStrategy {
@Autowired
Map<String,Strategy> strategys = new ConcurrentHashMap<>(3);
public Strategy getStragegy(String component) throws Exception{
Strategy strategy = strategys.get(component);
if(strategy == null){
throw new RuntimeException("no strategy defined");
}
return strategy;
}
}
2、Strategy接口,就一个execute方法。
public interface Strategy {
String execute();
}
3、定义接口的实现
我定义了三个, 都类似,这里我就放出一个来吧。Component里边的one是指定其名字,这个会作为key放到Map strategys里边。
@Component("one")
public class StrategyOne implements Strategy{
@Override
public String execute() {
return "one";
}
}
@Component("two")
public class StrategyTwo implements Strategy{
@Override
public String execute() {
return "two";
}
}
4、写一个Controller类,用于进行测试
@Controller
public class StrategyController {
@Autowired
FactoryStrategy factoryStrategy;
@RequestMapping("/strategy")
@ResponseBody
public String strategy(@RequestParam("key")String key){
String result;
try {
result = factoryStrategy.getStragegy(key).execute();
} catch (Exception e) {
result = e.getMessage();
}
return result;
}
}