Friend spotlight!
Whimsical Animations course
Friend spotlight!
NEW Whimsical Animations course
Friend spotlight! NEW Whimsical Animations course
huge discount only this week
Friend spotlight! Want to make your project stand out? NEW Whimsical Animations course huge discount only this week

Извлечение суперкласса

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

Проблема

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

Решение

Создайте для них общий суперкласс и перенесите туда одинаковые поля и методы.

До
Extract Superclass - Before
После
Extract Superclass - After

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

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

Достоинства

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

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

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

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

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

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

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