Паттерн для базового класса для предварительной проверки и/или последующей обработки переопределенного метода производного класса?

Паттерн для базового класса для предварительной проверки и/или последующей обработки переопределенного метода производного класса?
Паттерн для базового класса для предварительной проверки и/или последующей обработки переопределенного метода производного класса? - vingtcent @ Unsplash

Это разновидность шаблона шаблонного метода .

AbstractClass {
    void method() {
         methodImpl();
    }

    abstract void methodImpl();
}

ConcreteClass extends AbstractClass {
    void methodImpl() {
        // do stuff
    }
}

Этот шаблон также можно использовать, если основная работа выполняется суперклассом, а специализированному классу нужно реализовать только какой-то метод-хук (например, onConnected).

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

Для декоратора:

interface Database { void connect(); }

ConnectionDatabase implements Database {
    // pass in SpecializedDatabase
    ConnectionDatabase(Database actualDB) {...}
    void connect() {
        this.setStatus( CONNECTING )
        try {
            await this.actualDB.connect()
        }
        this.setStatus( CONNECTED )
    }
}

SpecializedDatabase implements Database {
    void connect() {
        // do stuff
    }
}

Вы также можете взглянуть на аспектно-ориентированное программирование , чтобы, например, обернуть некоторые сквозные обработки.

Edit: Еще одно предложение - цепочка ответственности. Она может иметь различные аспекты управления соединением, расположенные друг за другом (больше подходит для последовательного выполнения различных аспектов, а не действительно обертывания вокруг последователя). Это не совсем подходит для того, что есть у вас, но может дать вам повод задуматься о некоторых частях вашей системы.


LetsCodeIt, 7 марта 2023 г., 11:52