Ответ
Шаблонный метод (Template Method) — это поведенческий паттерн проектирования, который определяет скелет алгоритма в базовом классе, позволяя подклассам переопределять отдельные шаги алгоритма, не меняя его общей структуры.
Ключевая идея: Базовый класс объявляет шаблонный метод, который состоит из вызовов абстрактных или конкретных (часто с реализацией по умолчанию) примитивных методов. Подклассы реализуют эти примитивные методы, чтобы адаптировать алгоритм под свои нужды.
Пример на Java:
// Абстрактный класс, определяющий шаблонный метод
abstract class DataProcessor {
// Шаблонный метод (часто final, чтобы запретить изменение структуры)
public final void process() {
loadData();
transformData();
saveData();
logResult();
}
// Шаги алгоритма, которые могут быть переопределены
abstract void loadData();
abstract void transformData();
void saveData() {
// Реализация по умолчанию
System.out.println("Сохранение данных в БД...");
}
void logResult() {
// Реализация по умолчанию (Hook)
System.out.println("Обработка завершена.");
}
}
// Конкретная реализация
class CsvDataProcessor extends DataProcessor {
@Override
void loadData() {
System.out.println("Загрузка данных из CSV-файла.");
}
@Override
void transformData() {
System.out.println("Преобразование CSV-данных.");
}
}
Использование:
DataProcessor processor = new CsvDataProcessor();
processor.process(); // Выполняется алгоритм с пользовательскими шагами.
Преимущества:
- Избегает дублирования кода: Общая структура алгоритма определена в одном месте.
- Контроль над алгоритмом: Базовый класс контролирует структуру и точки расширения.
- Упрощает поддержку: Изменения в алгоритме вносятся в основном в базовый класс.
Недостатки:
- Может ограничивать гибкость: Подклассы обязаны следовать заданной структуре.
- Ведет к наследованию: Чрезмерное использование может усложнить иерархию классов.
Применение: Фреймворки (например, для инициализации приложений), обработка данных, алгоритмы с вариативными шагами.