Глянь мой новый курс по Git! Привет! Глянь мой новый курс по Git! Привет! Глянь мой новый курс по Git на GitByBit.com! Привет! Хочешь круто подтянуть Git? Глянь мой новый курс на GitByBit.com!

Спуск метода

Также известен как: Push Down Method

Проблема

Поведение, реализованное в суперклассе, используется только одним или несколькими подклассами.

Решение

Переместите это поведение в подклассы.

До
Push Down Method - Before
После
Push Down Method - After

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

Метод, который планировали сделать универсальным для всех классов, по факту используется только в одном подклассе. Такая ситуация может возникнуть, когда планируемые фичи так и не были реализованы.

Кроме того, такая ситуация может возникнуть после извлечения (или удаления) части функциональности из иерархии классов, после которого метод остался используемым только в одном подклассе.

Если вы видите, что метод необходим более чем одному подклассу (но не всем), возможно, стоит создать промежуточный подкласс и переместить метод в него. Это позволит избежать дублирования кода, которое возникло бы при спуске метода во все подклассы.

Достоинства

  • Улучшает связность внутри классов. Метод находится там, где вы ожидаете его увидеть.

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

  1. Объявите метод в подклассе и скопируйте его код из суперкласса.

  2. Удалите метод из суперкласса.

  3. Найдите все места, где используется метод, и убедитесь, что он вызывается из нужного подкласса.