Також відомий як Hide Delegate

Рефакторинг Приховання делегування

Проблема

Клієнт отримує об'єкт B з поля або методу об'єкту А. Потім клієнт викликає якийсь метод об'єкту B.

Рішення

Створіть новий метод в класі А, який би делегував виклик об'єкту B. Таким чином, клієнт перестане знати про клас В і залежати від нього.

До
Hide Delegate - Before
Після
Hide Delegate - After

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

Спершу слід визначитися з назвами:

  • сервер— це об'єкт, до якого клієнт має безпосередній доступ;
  • делегат— це кінцевий об'єкт, який містить функціональність, потрібну клієнтові.

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

Переваги

  • Приховує делегування від клієнта. Чим менше клієнтський код знає подробиць про зв'язки між об'єктами, тим простіше згодом вноситиме зміни в програму.

Недоліки

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

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

  1. Для кожного методу класа-делегата, що викликається клієнтом, треба створити метод в класі-сервері, який би делегував виклик класу-делегату.

  2. Змініть код клієнта так, щоб він викликав методи класу-сервера.

  3. Якщо після всіх змін клієнт більше не має потреби в класі-делегаті, можна прибрати метод доступу до класу-делегата з класу-сервера (той метод, який використовувався спочатку для отримання класу-делегата).

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

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

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

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