У меня есть приложение, которое использует абстрактный класс. Абстрактный класс имеет конкретный метод c, используемый классом приложения для определения того, какой подкласс абстрактного класса должен быть инициализирован (в соответствии с входными данными для класса приложения) для выполнения задачи typeSpecifi c.
Хотя я использую guice, чтобы ввести зависимость A в класс приложения.
Является ли if else logi c в классе приложения для инициализации плохого стиля кодирования typeOfInput. Так как я использую guice для инициализации зависимости «A», но использую «new» для инициализации подклассов в одном и том же классе. Есть ли способ, которым "typeOfInput" может быть инициализирован с помощью DI.
Может показаться глупым для некоторых людей, но я новичок. Заранее спасибо
public class Application {
private final Dependency a;
private AbstractClass typeOfInput;
private static final TypeOfInput typeA = some_constant_value;
@Inject
Application(final Dependency a){
this.a = a;
}
public doTask(final InputData inputData) {
if(AbstractClass.getInputType(inputData) == typeA){
typeOfInput = new classExtendingAbstractClassOne(a);
}else{
typeOfInput = new classExtendingAbstractClassTwo(a);
}
typeOfInput.doTypeSpecificTask();
}
}
abstract class AbstractClass{
//Concrete method
static TypeOfInput getTypeOfInput(final InputData inputData) {
//Does some processing and returns TypeOfInput value
}
abstract void doTypeSpecificTask();
}
class classExtendingAbstractClassOne extends AbstractClass {
void doTypeSpecificTask() {
//DO something relevant to this type
}
}
class classExtendingAbstractClassTwo extends AbstractClass {
void doTypeSpecificTask() {
//DO something relevant to this type
}
}