---
title: "Замена делегирования наследованием"
type: "refactoring-technique"
slug: "replace-delegation-with-inheritance"
url: "http://localhost:3000/ru/replace-delegation-with-inheritance.md"
category: "Решение задач обобщения"
description: "Проблема: Класс содержит множество простых делегирующих методов ко всем методам другого класса. Решение: Сделайте класс наследником делегата, после чего делегирующие методы потеряют смысл."
---
# Замена делегирования наследованием

> Проблема: Класс содержит множество простых делегирующих методов ко всем методам другого класса. Решение: Сделайте класс наследником делегата, после чего делегирующие методы потеряют смысл.

## Problem

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

## Solution

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

## Why Refactor

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

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

## Benefits

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

## How to Refactor

1. Сделайте класс подклассом класса-делегата.
2. В поле, содержащее ссылку на объект-делегат, поставьте текущий объект.
3. Один за другим удаляйте методы с простым делегированием. Если у них отличались названия, используйте [переименование метода](/ru/rename-method) чтобы привести все методы к одному названию.
4. Замените все обращения к полю-делегату обращениями к текущему объекту.
5. Удалите поле-делегат.
## Relations

**Similar techniques**

- [Удаление посредника](/ru/remove-middle-man.md)

**Opposite refactorings**

- [Замена наследования делегированием](/ru/replace-inheritance-with-delegation.md)

**Eliminates smells**

- [Неуместная близость](/ru/smells/inappropriate-intimacy.md)

