第一种
先创建可能可能出现的各种情况的枚举类
public enum Status{
ALL("11","哈哈哈"),
NB("22","NBA"),
POS("33","POS")
;
Status(String code, String message) {
this.code = code;
this.message = message;
}
private String code;
private String message;
public String getCode() {
return code;
}
public String getMessage() {
return message;
}
private static final Map<String, Status> cache = new HashMap<>();
static {
for (Status targetEnum : Status.values()) {
cache.put(targetEnum.getCode(), targetEnum);
}
}
public static Const.Status codeOf(Status code) {
return cache.getOrDefault(code, null);
}
}
/**
策列模式的接口
*/
public interface Strategy {
void algorithmInterface();
}
public class Test2 implements Strategy {
@Override
public void algorithmInterface() {
}
}
public class Test3 implements Strategy {
@Override
public void algorithmInterface() {
}
}
public class Test1 implements Strategy {
@Override
public void algorithmInterface() {
}
}
策略工厂 使用查表法
public class StartegyFactory {
//用于存储所有的设计模式
private static final Map<Const.Status,Strategy> startegyCache= Maps.newHashMap();
// 将对象存放到缓存中
static {
startegyCache.put(Const.Status.ALL,new Test1());
startegyCache.put(Const.Status.NB,new Test3());
startegyCache.put(Const.Status.POS,new Test2());
}
public static Strategy getStrategy(Const.Status status){
if (ObjectUtil.isEmpty(status)){
throw new IllegalStateException("该类型下没有值");
}
return startegyCache.getOrDefault(status,null);
}
}
测试
public class StartegyTest {
public static void main(String[] args) {
// 策略模式的使用
StartegyFactory.getStrategy(Const.Status.ALL).algorithmInterface();
}
}
稍微的改进 可以把策略模式的接口去掉 替换成 函数式接口
如
public class Test5 implements Function {
@Override
public Boolean apply(Object o) {
return null;
}
}