直接上代码
/**
- @Author: zhu jin liang
- @version: 1.0
- @Description:
- @createTime: 2023年05月15日22:24:18
**/
public interface FunctionStrategy<P,T,R> {
/**
* 暴露当前策略的钩子
* @return
*/
Predicate
predicate();
/**
* 暴露当前策略的生产逻辑
* @return
*/
Function<T,R> function();
}
import java.util.function.Function;
import java.util.function.Predicate;
/**
- @Author: zhu jin liang
- @version: 1.0
- @Description:
- @createTime: 2023年05月15日22:28:21
**/
public enum ReturnHomeStrategy implements FunctionStrategy<String, Integer, String> {
/**
* 高风险
/
HIGH_RISK(from -> “HIGH_RISK”.equals(from), i -> i+“在高风险回来了,get out!”),
/*
* 中风险
/
MIDDLE_RISK(from -> “MIDDLE_RISK”.equals(from), i -> i+“在中风险回来了,get out!”),
/*
* 低风险
*/
LOW_RISK(from -> “LOW_RISK”.equals(from), i -> i+“在低风险回来了,拉走先做个核酸检测!”);
private final Predicate<String> predicate;
private final Function<Integer, String> function;
public Predicate<String> getPredicate() {
return predicate;
}
public Function<Integer, String> getFunction() {
return function;
}
ReturnHomeStrategy(Predicate<String> predicate, Function<Integer, String> function) {
this.predicate = predicate;
this.function = function;
}
@Override
public Predicate<String> predicate() {
return this.predicate;
}
@Override
public Function<Integer, String> function() {
return this.function;
}
}
/**
- @Author: zhu jin liang
- @version: 1.0
- @Description:
- @createTime: 2023年05月15日22:40:51
**/
public class TestMain {
public static void main(String[] args) {
String low_risk = returnHome("LOW_RISK", 1);
System.out.println(low_risk);
}
/**
* 某人回村
* @param from 代表区域风险系数
* @param id 打工人
* @return 要证明
*/
public static String returnHome(String from, Integer id){
for (ReturnHomeStrategy value: ReturnHomeStrategy.values()) {
if(value.predicate().test(from)){
return value.function().apply(id);
}
}
throw new RuntimeException("外星人,抓起来放进动物园卖门票");
}
}