Обзор темы [Рефакторинг кода]

Замена делегирования наследованием

(Replace Delegation with Inheritance)

Используется делегирование, и приходится писать делегирующие методы ко всему интерфейсу.

Заменить класс со ссылкой на подкласс.

 

Обратный метод к Замене наследования делегированием.

Не надо использовать, если не все методы делегируются, так как интерфейс подкласса должен полностью поддерживать интерфейс суперкласса. Здесь можно использовать Избавление от промежуточного сервера, чтобы клиенты могли сами вызывать делегирующий класс. Можно использовать Извлечение суперкласса для отделения общего интерфейса и наследования от получившегося класса. Таким же образом можно использовать Извлечение интерфейса.

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