---
title: "Cacher le délégué"
type: "refactoring-technique"
slug: "hide-delegate"
url: "http://localhost:3000/fr/hide-delegate.md"
category: "Moving Features between Objects"
description: "Problème : le client obtient l'objet B à partir d'un champ ou d'une méthode de l'objet A. Le client appelle ensuite une méthode de l'objet B. Solution : créez une nouvelle méthode dans la classe A qui délègue l'appel à l'objet B. Désormais, le client ne connaît plus la classe B et n'en dépend plus."
---
# Cacher le délégué

> Problème : le client obtient l'objet B à partir d'un champ ou d'une méthode de l'objet A. Le client appelle ensuite une méthode de l'objet B. Solution : créez une nouvelle méthode dans la classe A qui délègue l'appel à l'objet B. Désormais, le client ne connaît plus la classe B et n'en dépend plus.

## Problem

Le client obtient l'objet B à partir d'un champ ou d'une méthode de l'objet A. Le client appelle ensuite une méthode de l'objet B.

## Solution

Créez une nouvelle méthode dans la classe A qui délègue l'appel à l'objet B. Désormais, le client ne connaît plus la classe B et n'en dépend plus.

## Why Refactor

Commençons par la terminologie :

* Le _serveur_ est l'objet auquel le client a directement accès.
* Le _délégué_ est l'objet final qui contient les fonctionnalités dont le client a besoin.

Une chaîne d'appels apparaît lorsqu'un client demande un objet à un autre objet, puis que ce second objet en demande un autre, et ainsi de suite. Ces séquences d'appels obligent le client à naviguer dans la structure des classes. Tout changement dans ces relations imposera des modifications du côté client.

## Benefits

* Masque la délégation au client. Moins le code client a besoin de connaître les détails des relations entre les objets, plus il est facile d'apporter des modifications à votre programme.

## How to Refactor

1. Pour chaque méthode de la _classe déléguée_ appelée par le client, créez une méthode dans la _classe serveur_ qui délègue l'appel à la _classe déléguée_.
2. Modifiez le code client afin qu'il appelle les méthodes de la _classe serveur_.
3. Si vos modifications libèrent le client de toute dépendance à la _classe déléguée_, vous pouvez supprimer de la _classe serveur_ la méthode d'accès à la _classe déléguée_ (la méthode initialement utilisée pour obtenir la _classe déléguée_).
## Relations

**Opposite refactorings**

- [Supprimer l’intermédiaire](/fr/remove-middle-man.md)

**Eliminates smells**

- [Chaînes de messages](/fr/smells/message-chains.md)
- [Intimité inappropriée](/fr/smells/inappropriate-intimacy.md)

