策略设计模式在运行时动态选择一种实现算法,一种策略。 该模式可用于根据情况选择不同的业务算法。
我们可以将不同的算法实现定义为单独的类。 或者,我们利用Java SE 8 lambda和函数,它们在此处充当轻量级策略实现。
CDI能够注入参数化类型:
public class Greeter {@InjectFunction<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;@Producespublic Function<String, String> exposeStrategy() {// select a strategy...return strategy;}
}
翻译自: https://www.javacodegeeks.com/2018/04/strategy-pattern-with-cdi-and-lambdas.html