Я использую шаблон разработки стратегии и хочу внедрить различные зависимости, основанные на некоторых условиях.
public interface strategy {
public void task();
}
public class concreteStrategyOne implements strategy {
public void task() {
//task strategy one
}
}
public class concreteStrategyTwo implements strategy {
public void task() {
//task strategy two
}
}
public class taskInHand {
private Strategy strategyImpl;
@Inject
public taskInHand(Strategy strategyImpl){
this.strategy = strategyImpl;
}
public void use(Object obj) {
if(obj.get("something") == 1){
strategyImpl.task();
// I want to call task() implemented in concreteStrategyOne
}
else if(obj.get("something") == 2){
strategtImpl.task()
// I want to call task() implemented in concreteStrategyTwo
}
}
}
Я знаю, что могу использовать аннотацию @Named
в конструкторе для привязки определенных классов c при внедрении но я хочу внедрить различные зависимости в соответствии с условиями, упомянутыми выше.
Итак, чтобы уточнить .. if(object.get("something")) returns 1
, я бы хотел запустить task()
, реализованный в concreteStrategyOne
.
Как это можно сделать?