Constituer une méthode patron.
Vos sous-classes implémentent des algorithmes qui contiennent des étapes similaires dans le même ordre.
Déplacez la structure de l'algorithme et les étapes identiques vers une superclasse, et laissez l'implémentation des étapes différentes dans les sous-classes.
##Example
##Why Refactor
Les sous-classes sont développées en parallèle, parfois par des personnes différentes, ce qui conduit à de la duplication de code, à des erreurs et à des difficultés de maintenance, puisque chaque modification doit être apportée dans toutes les sous-classes.
##Benefits
-
La duplication de code ne renvoie pas toujours à de simples cas de copier/coller. Souvent, la duplication se produit à un niveau plus élevé, par exemple lorsque vous avez une méthode pour trier des nombres et une méthode pour trier des collections d'objets qui ne se distinguent que par la comparaison des éléments. Créer une méthode patron élimine cette duplication en fusionnant les étapes communes de l'algorithme dans une superclasse et en ne laissant que les différences dans les sous-classes.
-
Constituer une méthode patron est un exemple du principe ouvert/fermé en action. Lorsqu'une nouvelle version de l'algorithme apparaît, il vous suffit de créer une nouvelle sous-classe ; aucune modification du code existant n'est nécessaire.
##How to Refactor
-
Décomposez les algorithmes des sous-classes en leurs parties constitutives, décrites dans des méthodes distinctes. Extraire une méthode peut vous y aider.
-
Les méthodes résultantes qui sont identiques pour toutes les sous-classes peuvent être déplacées vers une superclasse via Remonter une méthode.
-
Les méthodes non similaires peuvent recevoir des noms cohérents via Renommer une méthode.
-
Déplacez les signatures des méthodes non similaires vers une superclasse sous forme de méthodes abstraites en utilisant Remonter une méthode. Laissez leurs implémentations dans les sous-classes.
-
Et enfin, remontez la méthode principale de l'algorithme vers la superclasse. Elle devrait maintenant fonctionner avec les étapes décrites dans la superclasse, qu'elles soient réelles ou abstraites.