Logo ConstructiCat
CodeBust.
Parcourir la section ▾

Remplacer la délégation par l’héritage.

Problème

Une classe contient de nombreuses méthodes simples qui délèguent à toutes les méthodes d’une autre classe.

Solution

Faites de la classe un héritier du délégué, ce qui rend les méthodes de délégation inutiles.

##Exemple

Avant
class Employee {
  private Person person = new Person();

  String getName() { return person.getName(); }
  void setName(String arg) { person.setName(arg); }
}
Après
class Employee extends Person {
}

##Pourquoi refactoriser

La délégation est une approche plus flexible que l’héritage, car elle permet de modifier la manière dont la délégation est implémentée et d’y placer également d’autres classes. Néanmoins, la délégation cesse d’être avantageuse si vous déléguez des actions à une seule classe et à toutes ses méthodes publiques.

Dans ce cas, si vous remplacez la délégation par l’héritage, vous débarrassez la classe d’un grand nombre de méthodes de délégation et vous vous évitez d’avoir à les créer pour chaque nouvelle méthode de la classe déléguée.

##Avantages

  • Réduit la longueur du code. Toutes ces méthodes de délégation ne sont plus nécessaires.

##Comment refactoriser

  1. Faites de la classe une sous-classe de la classe déléguée.

  2. Placez l’objet courant dans un champ contenant une référence vers l’objet délégué.

  3. Supprimez les méthodes de simple délégation une par une. Si leurs noms étaient différents, utilisez Renommer une méthode pour donner à toutes les méthodes un nom unique.

  4. Remplacez toutes les références au champ délégué par des références à l’objet courant.

  5. Supprimez le champ délégué.