Skip to main content

Яка ідея патерну Template Method?

Патерн Template Method (Шаблонний метод) задає скелет (структуру) алгоритму в базовому класі, дозволяючи підкласам перевизначати окремі кроки без зміни загальної послідовності дій.


1. Головна ідея

Визначити "шаблон" виконання алгоритму в одному місці (у суперкласі), але дати підкласам можливість змінювати конкретні кроки, зберігаючи загальний порядок.

Іншими словами:

  • базовий клас керує порядком виконання,
  • дочірні класи керують деталями реалізації.

2. Приклад (Java)

Абстрактний клас із шаблонним методом

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("Збереження даних у БД..."); } }

Конкретні реалізації

java
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-структури"); } }

Використання

java
DataProcessor processor = new CSVProcessor(); processor.processData();

Результат:

javascript
Читання CSV-файлу Парсинг рядків CSV Збереження даних у БД...

3. Що відбувається

  • Метод processData() - фіксує структуру алгоритму.
  • Підкласи перевизначають лише "порожні місця" (readData(), processDataInternal()), не змінюючи сам "скелет" процесу.
  • processData() оголошено як final, щоб заборонити змінювати послідовність кроків.

4. Де це застосовується

  • Коли потрібно гарантувати однакову послідовність дій, але при цьому різні реалізації деталей.

    Наприклад: генерація звітів, обробка файлів, рендеринг сторінок.

  • Коли частина алгоритму спільна, а інша змінюється від підкласу до підкласу.

  • Коли потрібно контролювати "життєвий цикл" операції, але дозволити дочірнім класам вставити свою логіку.


5. Переваги

  • Прибирає дублювання спільної логіки.
  • Робить процес розширюваним без переписування базового алгоритму.
  • Гарантує правильний порядок виконання кроків.

6. Недоліки

  • Сильна залежність між суперкласом і підкласами.
  • Складно підтримувати, якщо алгоритм надто складний або часто змінюється.

Висновок

Патерн Template Method задає "каркас" алгоритму, а конкретні деталі делегує підкласам.

Підсумок:

Базовий клас вирішує "що і в якому порядку робити", а підкласи - "як саме це робити".

Коротка відповідь

Для співбесіди
Premium

Коротка відповідь допоможе вам впевнено відповідати на цю тему під час співбесіди.