Introduire une extension locale.
Une classe utilitaire ne contient pas certaines méthodes dont vous avez besoin. Mais vous ne pouvez pas ajouter ces méthodes à la classe.
Créez une nouvelle classe contenant ces méthodes et faites-en soit une classe fille, soit un wrapper de la classe utilitaire.
##Example
##Why Refactor
La classe que vous utilisez ne possède pas les méthodes dont vous avez besoin. Pire encore, vous ne pouvez pas ajouter ces méthodes (parce que les classes se trouvent dans une bibliothèque tierce, par exemple). Il existe deux solutions :
-
Créer une sous-classe à partir de la classe concernée, contenant les méthodes et héritant de tout le reste de la classe parente. Cette approche est plus simple, mais elle est parfois bloquée par la classe utilitaire elle-même (à cause de
final). -
Créer une classe wrapper qui contient toutes les nouvelles méthodes et, pour le reste, délègue à l'objet associé de la classe utilitaire. Cette méthode demande davantage de travail, car vous avez besoin non seulement de code pour maintenir la relation entre le wrapper et l'objet utilitaire, mais aussi d'un grand nombre de méthodes de délégation simples afin d'émuler l'interface publique de la classe utilitaire.
##Benefits
- En déplaçant les méthodes supplémentaires dans une classe d'extension distincte (wrapper ou sous-classe), vous évitez d'encombrer les classes clientes avec du code qui n'a pas sa place. Les composants du programme sont plus cohérents et plus réutilisables.
##How to Refactor
-
Créez une nouvelle classe d'extension :
-
Option A : faites-en une classe fille de la classe utilitaire.
-
Option B : si vous avez décidé de créer un wrapper, ajoutez-y un champ pour stocker l'objet de la classe utilitaire auquel la délégation sera faite. Avec cette option, vous devrez aussi créer des méthodes qui reproduisent les méthodes publiques de la classe utilitaire et se contentent de déléguer aux méthodes de l'objet utilitaire.
-
-
Créez un constructeur qui utilise les paramètres du constructeur de la classe utilitaire.
-
Créez également un constructeur « de conversion » alternatif qui ne prend en paramètre que l'objet de la classe d'origine. Cela aidera à substituer l'extension aux objets de la classe d'origine.
-
Créez de nouvelles méthodes étendues dans la classe. Déplacez les méthodes étrangères provenant d'autres classes vers cette classe, ou bien supprimez ces méthodes étrangères si leur fonctionnalité est déjà présente dans l'extension.
-
Remplacez l'utilisation de la classe utilitaire par la nouvelle classe d'extension là où sa fonctionnalité est nécessaire.