Абстрактный класс избегает создания нескольких экземпляров объекта для передачи разных входных данных - PullRequest
0 голосов
/ 17 февраля 2020

Я пытаюсь реорганизовать класс, используя абстрактный класс, и пытаюсь понять, правильный ли мой подход.

Для каждого объекта, который я получаю, у меня есть базовый валидатор, который выполняет некоторые базовые проверки 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 каждый раз, когда я нужно будет сделать с подходом абстрактного класса. Что-то не так с тем, как я смоделировал свой абстрактный класс?

1 Ответ

2 голосов
/ 18 февраля 2020

Вы можете смешать два своих собственных решения, чтобы сделать что-то вроде этого

public abstract class Validator {
    BaseValidator baseValidator;

    protected abstract void customValidationOnObject(String inputObject);

    public void validateObject(String inputObject) {
        baseValidator.validate(inputObject);
        customValidationOnObject(inputObject);
    }
}

class TypeAValidator extends Validator{

    @Override
    protected void customValidationOnObject(String inputObject) {
        // custom validate the Object
    }
}

И вы можете вызвать TypeAValidator.validateObject(inputObject) для одного объекта TypeAValidator.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...