`package com.example.demo.designpattern.strategy;
public enum FutureChose { KAOYAN("KAOYAN", "考研"), WORK("WORK","工作");
private String name;
private String desc;
FutureChose(String name, String desc) {
this.name = name;
this.desc = desc;
}
} `
`package com.example.demo.designpattern.strategy;
public interface Handler {
String getType();
String execute(String param);
} `
`package com.example.demo.designpattern.strategy;
import org.springframework.stereotype.Component;
@Component public class KaoyanStragy implements Handler{
[@Override](https://my.oschina.net/u/1162528)
public String getType() {
return FutureChose.KAOYAN.name();
}
[@Override](https://my.oschina.net/u/1162528)
public String execute(String param) {
return param + "未来准备考研,勿扰";
}
} `
`package com.example.demo.designpattern.strategy;
import org.springframework.stereotype.Component;
@Component public class WorkStragy implements Handler{
[@Override](https://my.oschina.net/u/1162528)
public String getType() {
return FutureChose.WORK.name();
}
@Override
public String execute(String param) {
return param + "未来准备工作,勿扰";
}
} `
`package com.example.demo.designpattern.strategy;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service;
import javax.annotation.PostConstruct; import java.util.List; import java.util.Map; import java.util.function.Function; import java.util.stream.Collectors;
@Service public class StrategyMrt {
@Autowired
List<Handler> handlerList;
private Map<String,Handler> handlerMap;
@PostConstruct
private void init(){
handlerMap= handlerList.stream().collect(Collectors.toMap(Handler::getType, Function.identity()));
}
/**
* 根据传入枚举类型查找具体handler
* @param futureChose
* @return
*/
public Handler getHandler(FutureChose futureChose){
return handlerMap.get(futureChose.name());
}
} `
http://localhost:8080/handler/strategy?futureChose=KAOYAN
http://localhost:8080/handler/strategy?futureChose=WORK
则做如下操作:
`package com.example.demo.designpattern.strategy;
public enum FutureChose { KAOYAN("KAOYAN", "考研"), CHUANGYE("CHUANGYE", "创业"), WORK("WORK","工作");
private String name;
private String desc;
FutureChose(String name, String desc) {
this.name = name;
this.desc = desc;
}
} `
`package com.example.demo.designpattern.strategy;
import org.springframework.stereotype.Component;
@Component public class ChuangyeStragy implements Handler{
@Override
public String getType() {
return FutureChose.CHUANGYE.name();
}
@Override
public String execute(String param) {
return param + "未来准备创业,勿扰";
}
} `
效果如下: