ConstructiCat Logo
CodeBust.
Browse section ▾

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

Problem

Класс содержит множество простых делегирующих методов ко всем методам другого класса.

Solution

Сделайте класс наследником делегата, после чего делегирующие методы потеряют смысл.

##Example

До
Replace Delegation with Inheritance - Before
После
Replace Delegation with Inheritance - After

##Why Refactor

Делегирование является более гибким подходом, чем наследование, так как позволяет изменять поведение класса на лету, заменяя объект к которому происходит делегирование. Тем не менее, применение делегирования перестаёт быть выгодным, если вы делегируете действия только одному классу, причём всем его публичным методам.

Если в этом случае заменить делегирование наследованием, вы избавите класс от множества делегирующих методов, а себя от необходимости создавать их для каждого нового метода класса-делегата.

##Benefits

  • Уменьшает количество кода. Вам больше не нужны все эти делегирующие методы.

##How to Refactor

  1. Сделайте класс подклассом класса-делегата.

  2. В поле, содержащее ссылку на объект-делегат, поставьте текущий объект.

  3. Один за другим удаляйте методы с простым делегированием. Если у них отличались названия, используйте переименование метода чтобы привести все методы к одному названию.

  4. Замените все обращения к полю-делегату обращениями к текущему объекту.

  5. Удалите поле-делегат.