Я пытаюсь реорганизовать класс, используя абстрактный класс, и пытаюсь понять, правильный ли мой подход.
Для каждого объекта, который я получаю, у меня есть базовый валидатор, который выполняет некоторые базовые проверки c, а затем имеет специальный валидатор, который выполняет некоторые дополнительные проверки в зависимости от типа объекта. Я чувствую, что это хорошее использование абстрактных классов.
public abstract class Validator {
BaseValidator baseValidator;
abstract void customValidation();
void validateObject() {
baseValidator.validate(getInputObject());
customValidation();
}
abstract String getInputObject();
}
public TypeAValidator extends Validator {
@Override
public void customValidation() {
//Do something with getInputObject();
}
@Override public String getInputObject() {
return "someInput";
}
}
Я не думаю, что каждый вход как часть геттера кажется правильным подходом. Если бы я использовал неабстрактный подход к классу, я бы сделал это:
public TypeAValidator {
BaseValidator baseValidator;
public void validateObject(String inputObject) {
baseValidator.validate(inputObject);
customValidation(inputObject);
}
}
При таком подходе все, что мне нужно, это вызывать typeAValidator.validateObject(inputObject)
без создания нового экземпляра TypeAValidator
каждый раз, когда я нужно будет сделать с подходом абстрактного класса. Что-то не так с тем, как я смоделировал свой абстрактный класс?