Також відомий як Form Template Method

Рефакторинг Створення шаблонного методу

Проблема

В підкласах реалізовані алгоритми, що містять схожі кроки і однаковий порядок виконання цих кроків.

Рішення

Винесіть структуру алгоритму і однакові кроки в суперклас, а в підкласах залиште реалізацію кроків, що відрізняються.

До
Form Template Method - Before
Після
Form Template Method - After

Причини рефакторингу

Підкласи розвиваються паралельно. Íноді з ними працюють різні люди, що призводить до дублювання коду і помилок, а також до ускладнення підтримки, оскільки кожну зміну доводиться проводити в усіх підкласах.

Переваги

  • Коли ми говоримо про дублювання коду, не завжди мається на увазі програмування методом копіювання-вставки. Часто дублювання виникає на абстрактнішому рівні. Наприклад, у вас є метод сортування чисел і метод сортування колекції об'єктів, при цьому, єдине, чим вони відрізняються це порівняння елементів. Створення шаблонного методу дозволяє впоратися з таким дублюванням, об'єднавши спільні кроки алгоритму в суперкласі і залишивши відмінності для підкласів.

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

Порядок рефакторингу

  1. Розбийте алгоритми в підкласах на складові частини, описані в окремих методах. У цьому може допомогти витягання методу.

  2. Методи, що вийшли однаковимі для усіх підкласів, можете сміливо переміщати в суперклас, використовуючи підйом методу.

  3. Методи, що відрізняються, приведіть до єдиних назв за допомогою перейменування методу.

  4. Помістіть сигнатури методів, що відрізняються, в суперклас як абстрактні за допомогою підйому методу. Їх реалізації залиште в підкласах.

  5. І, нарешті, підніміть основний метод алгоритму в суперклас. Він тепер повинен працювати з методами-кроками, описаними в суперкласі — реальними або абстрактними.

Замучились читати?

Збігайте за подушкою, в нас тут контенту на 7 годин читання.

Або спробуйте наш новий інтерактивний курсу. Він набагато цікавіший за банальний тест.

Дізнатися більше...