Также известен как Form Template Method

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

Проблема

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

Решение

Вынесите структуру алгоритма и одинаковые шаги в суперкласс, а в подклассах оставьте реализацию отличающихся шагов.
До
Form Template Method - Before
После
Form Template Method - After

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

Подклассы развиваются параллельно. Иногда разными людьми, что приводит к дублированию кода и ошибок, а также к усложнению поддержки, т.к. каждое изменение приходится проводить во всех подклассах.

Достоинства

  • Когда мы говорим о дублировании кода, не всегда имеется в виду программирование методом копирования-вставки. Нередко дублирование возникает на более абстрактном уровне. Например, у вас есть метод сортировки чисел и метод сортировки коллекции объектов, при этом, единственное, чем они отличаются это сравнение элементов. Создание шаблонного метода позволяет справиться с таким дублированием, объединив общие шаги алгоритма в суперклассе и оставив различия для подклассов.

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

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

  1. Разбейте алгоритмы в подклассах на составные части, описанные в отдельных методах. В этом может помочь извлечение метода.

  2. Получившиеся методы, одинаковые для всех подклассов, можете смело перемещать в суперкласс, используя подъём метода.

  3. Отличающиеся методы приведите к единым названиям с помощью переименования метода.

  4. Поместите сигнатуры отличающихся методов в суперкласс как абстрактные с помощью подъёма метода. Их реализации оставьте в подклассах.

  5. И наконец, поднимите основной метод алгоритма в суперкласс. Он теперь должен работать с методами-шагами, описанными в суперклассе — реальными или абстрактными.

Устали читать?

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

Или попробуйте наш новый интерактивный курс по рефакторингу. Он более информативный и гораздо более интересный, чем банальный текст.

Узнать больше...

Живой пример

Первый раз здесь? Ничего страшного!

У нас здесь всё просто – интерактивный пример очень похож на видео (но выглядит гораздо круче).

  1. После начала проигрывания, вам показываются разнообразные подсказки и сообщения. Вы продвигаетесь дальше, кликая на них.
  2. Вы можете перематывать шаги, используя стрелки слева.
  3. Кроме того, вы можете посмотреть разницу между первоначальным и получившимся кодом, нажав кнопку с глазом ().
  4. Кнопка компиляции () позвоялет проверить текущий код на наличие ошибок.