策略设计模式在运行时动态选择一种实现算法,一种策略。 该模式可用于根据情况选择不同的业务算法。
我们可以将不同的算法实现定义为单独的类。 或者,我们利用Java SE 8 lambda和函数,它们在此处充当轻量级策略实现。
CDI能够注入参数化类型:
public class Greeter {
@Inject
Function<String, String> greetingStrategy;
public String greet(String name) {
return greetingStrategy.apply(name);
}
}
CDI生产者根据动态逻辑创建并公开问候语。 实际策略由Function
类型表示并动态选择:
public class GreetingStrategyExposer {
private final Function<String, String> formalGreeting = name -> "Dear " + name;
private final Function<String, String> informalGreeting = name -> "Hey " + name;
@Produces
public Function<String, String> exposeStrategy() {
// select a strategy
...
return strategy;
}
}
翻译自: https://www.javacodegeeks.com/2018/04/strategy-pattern-with-cdi-and-lambdas.html