基于Spring自动注入实现的策略模式
实现策略
public interface ActionStrategy(){
void do();
}
@Service
public class DineAction implements ActionStrategy{
@Override
public void do(){
System.out.println("吃饭");
}
}
@Service
public class SleepAction implements ActionStrategy{
@Override
public void do(){
System.out.println("睡觉");
}
}
@Service
public class PlayGameAction implements ActionStrategy{
@Override
public void do(){
System.out.println("打游戏");
}
}
策略枚举类
public enum ActionStrategyEnum{
DINE_ACTION("吃饭","dineAction"),
SLEEP_ACTION("睡觉","sleepAction"),
PLAY_GAME_ACTION("打游戏","playGameAction");
private String action;
private String beanName;
public static String getBeanNameByName(String action){
if(StringUtils.isBlank(action)){
return StrUtil.EMPTY;
}
for(ActionStrategyEnum value:ActionStrategyEnum.values()){
if(name.equals(value.name)){
return value.beanName;
}
}
return StrUtil.EMPTY;
}
}
选择策略类
@Service
public class ChooseActionStrategy{
//利用spring自动注入,将实现类映射为名字和实体类
@Resource
private Map<String,ActionStrategy> actionStrategyMap;
public ActionStrategy getStrategy(String actionName){
String beanName=ActionStrategyEnum.getBeanNameByName(actionName);
return actionStrategyMap.get(beanName);
}
}
使用
public class Strategy{
@Resource
private ChooseStrategy chooseStrategy;
public void demo(String[] actions){
String[] actions={"吃饭","睡觉","打游戏"}
for(String action:actions){
ActionStrategy actionStrategy=chooseStrategy.getAction(acion);
if(Objects.isNull(actionStrategy)){
return;
}
actionStrtegy.do();
}
}
}
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 Pluto404`s blog!