Спуск методу
Проблема
Поведінка, реалізована в суперкласі, використовується тільки одним або декількома підкласами.
Рішення
Перемістіть цю поведінку в підкласи.
![Push Down Method - Before](/images/refactoring/diagrams/Push Down Method - Before.png?id=ed31b8dcbc3c98fc668ce95cff9f76a8)
![Push Down Method - After](/images/refactoring/diagrams/Push Down Method - After.png?id=dcf9788fec0c13fb8e60fe494d481529)
Причини рефакторингу
Метод, який планували зробити універсальним для усіх класів, по факту використовується тільки в одному підкласі. Така ситуація може виникнути, коли плановані фічи так і не були реалізовані.
Крім того, така ситуація може виникнути після відокремлення (чи видалення) частини функціональності з ієрархії класів, після якого метод залишився використовуваним тільки в одному підкласі.
Якщо ви бачите, що метод потрібний більш ніж одному підкласу (але не всім), можливо, варто створити проміжний підклас і перемістити метод в нього. Це дозволить уникнути дублювання коду, яке виникло б при спуску методу в усі підкласи.
Переваги
- Покращує зв’язність усередині класів. Метод знаходиться там, де ви очікуєте його побачити.
Порядок рефакторіингу
-
Оголосіть метод в підкласі і скопіюйте його код з суперкласу.
-
Видаліть метод з суперкласу.
-
Знайдіть усі місця, де використовується метод, і переконаєтеся, що він викликається з потрібного підкласу.