Також відомий як Replace Delegation with Inheritance

Рефакторинг Заміна делегування наслідуванням

Проблема

Клас містить безліч простих делегуючих методів до усіх методів іншого класу.

Рішення

Зробіть клас спадкоємцем делегата, що після чого делегують методи втратять сенс.
До
Replace Delegation with Inheritance - Before
Після
Replace Delegation with Inheritance - After

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

Делегування є гнучкішим підходом, ніж наслідування, оскільки дозволяє змінювати поведінку класу на льоту, заміняючи об'єкт, до якого делегується виконання. Проте, застосування делегування перестає бути вигідним, якщо ви делегуєте дії тільки одному класу, причому усім його публічним методам.

Якщо в цьому випадку замінити делегування наслідуванням, ви позбавите клас від безлічі делегуючих методів, а себе від необхідності створювати їх для кожного нового методу класу-делегата.

Переваги

  • Зменшує кількість коду. Вам більше не потрібні усі ці делегуючі методи.

Коли не слід застосовувати

  • Не застосовуйте рефакторинг, якщо клас містить делегування тільки до частини публічних методів класу-делегата. Цим ви порушите принцип заміщення Барбари Лісков.

  • Цей рефакторинг може бути застосований тільки якщо клас ще не має батьків.

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

  1. Зробіть клас підкласом класу-делегату.

  2. У поле, що містить посилання на об'єкт-делегат, поставте поточний об'єкт.

  3. Один за іншим видаляйте методи з простим делегуванням. Якщо в них відрізнялися назви, використайте «перейменування методу» (Rename method) щоб привести усі методи до однієї назви.

  4. Замініть усі звернення до поля-делегата зверненнями до поточного об'єкту.

  5. Видаліть поле-делегат.

Замучились читати?

Збігайте за подушкою, в нас тут контенту приблизно на 7 годин читання.

Або спробуйте наш новий інтерактивний курс з рефакторингу. Він більш інформативний та набагато цікавіший за банальний тест.

Дізнатися більше...

Живий приклад

Перший раз у нас? Нічого страшного!

У нас тут все просто – цей інтерактивний приклад дуже схожий на відео (хоча й виглядає набагато крутіше).

  1. Натискаєте велику кнопку "Почати", а далі слідуєте усім підказкам.
  2. Ви можете перемотувати програвання, використовуючи стрілки зліва.
  3. Окрім того, ви можете подивитися різницю між стартовим та отриманим кодом, натиснувши кнопку ока ().
  4. Кнопка компіляції та тестування () дає змогу перевірити код на наявність помилок.