实现策略

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();
		}
	}
}