Какой шаблон использовать для выполнения нового кода, просто добавляя новые подклассы базового класса? - PullRequest
0 голосов
/ 28 августа 2018

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

std::list<int> error_list;
void validate()
{
    if( validate_0001() == false )
    { error_list.push_back(1); }

    if( validate_0002() == false )
    { error_list.push_back(2); }

    ...
}

Метод validate является общедоступным в классе, ответственном за выполнение различных действий, в примерах валидаций, каждый из которых имеет уникальный идентификатор. Я хочу иметь возможность добавлять новое действие, просто расширяя базовый класс, без необходимости создавать новый метод и добавлять его вызов и обработку ошибок в методе validate.

Ответы [ 2 ]

0 голосов
/ 28 августа 2018

Я предлагаю вам использовать проверяющие декораторы (Вот пример Java)

    abstract class Validation {
        final List<Integer> list;

        Validation(List<Integer> list) {
            this.list = list;
        }

        public abstract int error();
    }

    class FirstValidation extends Validation {

        public FirstValidation(List<Integer> list) {
            super(list);
        }

        @Override
        public int error() {
            return 0;
        }
    }
0 голосов
/ 28 августа 2018

Вы не можете реально расширить одну функцию из базового класса, не расширив весь класс. Одна вещь, которую вы можете сделать, это создать методы проверки в отдельном классе и расширить его двумя другими классами. Еще одна вещь, которую вы можете сделать, это сделать валидации абстрактным классом и реализовать их по своему усмотрению в дочерних классах. Недостатком этого подхода является то, что вам придется предоставлять реализацию в каждом из дочерних классов.

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