Яка ідея патерну Template Method?
Патерн Template Method (Шаблонний метод) задає скелет (структуру) алгоритму в базовому класі, дозволяючи підкласам перевизначати окремі кроки без зміни загальної послідовності дій.
1. Головна ідея
Визначити "шаблон" виконання алгоритму в одному місці (у суперкласі), але дати підкласам можливість змінювати конкретні кроки, зберігаючи загальний порядок.
Іншими словами:
- базовий клас керує порядком виконання,
- дочірні класи керують деталями реалізації.
2. Приклад (Java)
Абстрактний клас із шаблонним методом
abstract class DataProcessor {
// Шаблонний метод
public final void processData() {
readData();
processDataInternal();
saveData();
}
protected abstract void readData();
protected abstract void processDataInternal();
protected void saveData() {
System.out.println("Збереження даних у БД...");
}
}Конкретні реалізації
class CSVProcessor extends DataProcessor {
protected void readData() {
System.out.println("Читання CSV-файлу");
}
protected void processDataInternal() {
System.out.println("Парсинг рядків CSV");
}
}
class JSONProcessor extends DataProcessor {
protected void readData() {
System.out.println("Читання JSON-файлу");
}
protected void processDataInternal() {
System.out.println("Парсинг JSON-структури");
}
}Використання
DataProcessor processor = new CSVProcessor();
processor.processData();Результат:
Читання CSV-файлу
Парсинг рядків CSV
Збереження даних у БД...3. Що відбувається
- Метод
processData()- фіксує структуру алгоритму. - Підкласи перевизначають лише "порожні місця" (
readData(),processDataInternal()), не змінюючи сам "скелет" процесу. processData()оголошено якfinal, щоб заборонити змінювати послідовність кроків.
4. Де це застосовується
-
Коли потрібно гарантувати однакову послідовність дій, але при цьому різні реалізації деталей.
Наприклад: генерація звітів, обробка файлів, рендеринг сторінок.
-
Коли частина алгоритму спільна, а інша змінюється від підкласу до підкласу.
-
Коли потрібно контролювати "життєвий цикл" операції, але дозволити дочірнім класам вставити свою логіку.
5. Переваги
- Прибирає дублювання спільної логіки.
- Робить процес розширюваним без переписування базового алгоритму.
- Гарантує правильний порядок виконання кроків.
6. Недоліки
- Сильна залежність між суперкласом і підкласами.
- Складно підтримувати, якщо алгоритм надто складний або часто змінюється.
Висновок
Патерн Template Method задає "каркас" алгоритму, а конкретні деталі делегує підкласам.
Підсумок:
Базовий клас вирішує "що і в якому порядку робити", а підкласи - "як саме це робити".
Коротка відповідь
Для співбесідиКоротка відповідь допоможе вам впевнено відповідати на цю тему під час співбесіди.