ConstructiCat Logo
CodeBust.
Browse section ▾

Cacher le délégué.

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.

##Example

Avant
Client Class Person getDepartment() Department getManager()
Après
Client Class Person getManager() Department

##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).