Core Java
Strategy Pattern with CDI and lambdas
The strategy design pattern dynamically chooses an implementation algorithm, a strategy, at runtime. The pattern can be used to select different business algorithms depending on the circumstances.
We could define different algorithm implementations as separate classes. Or we make use of Java SE 8 lambdas and functions, that serve as lightweight strategy implementation here.
CDI is capable of injecting parameterized types:
public class Greeter { @Inject Function<String, String> greetingStrategy; public String greet(String name) { return greetingStrategy.apply(name); } }
A CDI producer creates and exposes the greeting depending on the dynamic logic. The actual strategy is represented by the Function
type and being selected dynamically:
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; } }
Published on Java Code Geeks with permission by Sebastian Daschner, partner at our JCG program. See the original article here: Strategy Pattern with CDI and lambdas Opinions expressed by Java Code Geeks contributors are their own. |