Remplacer un constructeur par une méthode de fabrique.
Vous avez un constructeur complexe qui fait autre chose que simplement affecter les valeurs des paramètres aux champs de l'objet.
Créez une méthode de fabrique et utilisez-la pour remplacer les appels au constructeur.
##Example
class Employee {
Employee(int type) {
this.type = type;
}
// ...
}class Employee {
static Employee create(int type) {
employee = new Employee(type);
// effectue un traitement lourd.
return employee;
}
// ...
}##Why Refactor
La raison la plus évidente d'utiliser cette technique de refactorisation est liée à Remplacer un code de type par des sous-classes.
Vous avez du code dans lequel un objet était auparavant créé et où la valeur du type codé lui était transmise. Après application de la méthode de refactorisation, plusieurs sous-classes sont apparues et vous devez en créer les objets en fonction de la valeur du type codé. Modifier le constructeur d'origine pour qu'il renvoie des objets de sous-classe est impossible ; à la place, nous créons donc une méthode de fabrique statique qui renverra les objets des classes nécessaires, puis remplace tous les appels au constructeur d'origine.
Les méthodes de fabrique peuvent aussi être utilisées dans d'autres situations, lorsque les constructeurs ne sont pas à la hauteur de la tâche. Elles peuvent être importantes lorsqu'on tente de Transformer une valeur en référence. On peut également les utiliser pour définir divers modes de création qui vont au-delà du nombre et des types de paramètres.
##Benefits
-
Une méthode de fabrique ne renvoie pas nécessairement un objet de la classe dans laquelle elle a été appelée. Il s'agit souvent de ses sous-classes, sélectionnées en fonction des arguments fournis à la méthode.
-
Une méthode de fabrique peut porter un meilleur nom qui décrit ce qu'elle renvoie et comment, par exemple
Troops::GetCrew(myTank). -
Une méthode de fabrique peut renvoyer un objet déjà créé, contrairement à un constructeur, qui crée toujours une nouvelle instance.
##How to Refactor
-
Créez une méthode de fabrique. Placez-y un appel au constructeur actuel.
-
Remplacez tous les appels au constructeur par des appels à la méthode de fabrique.
-
Déclarez le constructeur privé.
-
Examinez le code du constructeur et essayez d'isoler le code qui n'est pas directement lié à la construction d'un objet de la classe actuelle, en le déplaçant vers la méthode de fabrique.