Также известен как Extract Superclass

Рефакторинг Извлечение суперкласса

Проблема

У вас есть два класса с общими полями и методами.

Решение

Создайте для них общий суперкласс и перенесите туда одинаковые поля и методы.
До
Extract Superclass - Before
После
Extract Superclass - After

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

Одним из видов дублирования кода является наличие двух классов, выполняющих сходные задачи одинаковым способом или сходные задачи разными способами. Объекты предоставляют встроенный механизм для упрощения такой ситуации с помощью наследования. Однако часто общность оказывается незамеченной до тех пор, пока не будут созданы какие-то классы, и тогда появляется необходимость создавать структуру наследования позднее.

Достоинства

  • Убирает дублирование кода. Общие поля и методы теперь «живут» только в одном месте.

Когда нельзя применить

  • Вы не можете применить этот рефакторинг к классам, которые уже имеют суперкласс.

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

  1. Создайте абстрактный суперкласс.

  2. Используйте подъём поля, подъём метода и подъём тела конструктора для перемещения общей функциональности в суперкласс. Лучше начинать с полей, т.к. помимо общих полей, вам нужно будет перенести те из них, которые используются в общих методах.

  3. Стоит поискать места в клиентском коде, в которых можно заменить использование подклассов вашим общим классом (например, в объявлениях типов).

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

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

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

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

Живой пример

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

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

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