GeeksforGeeks

La méthode d’usine est un modèle de conception de création qui permet à une interface ou à une classe de créer un objet, mais laisse les sous-classes décider de la classe ou de l’objet à instancier. En utilisant la méthode Factory, nous avons les meilleurs moyens de créer un objet. Ici, les objets sont créés sans exposer la logique au client et pour créer le nouveau type d’objet, le client utilise la même interface commune.

Problèmes auxquels nous sommes confrontés sans méthode d’usine:

Imaginez que vous ayez votre propre startup qui propose du covoiturage dans les différentes parties du pays. La version initiale de l’application ne fournit que le covoiturage à Deux roues, mais au fil du temps, votre application devient populaire et vous souhaitez maintenant ajouter également le covoiturage à Trois et Quatre roues.
C’est une excellente nouvelle ! mais qu’en est-il des développeurs de logiciels de votre startup. Ils doivent changer tout le code car maintenant la majeure partie du code est couplée à la classe Deux roues et les développeurs doivent apporter des modifications à l’ensemble de la base de code.
Après avoir terminé tous ces changements, soit les développeurs se terminent par le code désordonné, soit par la lettre de démission.

 factory-pattern-python

Application de localisation

Représentation schématique des problèmes sans utiliser la méthode d’usine

Comprenons le concept avec un autre exemple qui est lié aux traductions et à la localisation des différentes langues.
Supposons que nous ayons créé une application dont le but principal est de traduire une langue dans une autre et que notre application ne fonctionne actuellement que dans 10 langues. Maintenant, notre application est devenue très populaire parmi les gens, mais la demande a soudainement augmenté pour inclure 5 langues supplémentaires.
C’est une excellente nouvelle ! seulement pour le propriétaire pas pour les développeurs. Ils doivent changer tout le code car maintenant la majeure partie du code est couplée aux langages existants uniquement et c’est pourquoi les développeurs doivent apporter des modifications à l’ensemble de la base de code, ce qui est vraiment une tâche difficile à faire.

Regardons le code du problème auquel nous pouvons faire face sans utiliser la méthode d’usine.

Remarque: Le code suivant est écrit sans utiliser la méthode d’usine.

class FrenchLocalizer:
def __init__(self):
self.translations = {"car": "voiture", "bike": "bicyclette",
"cycle":"cyclette"}
def localize(self, message):
return self.translations.get(msg, msg)
class SpanishLocalizer:
def __init__(self):
self.translations = {"car": "coche", "bike": "bicicleta",
"cycle":"ciclo"}
def localize(self, msg):
return self.translations.get(msg, msg)
class EnglishLocalizer:
def localize(self, msg):
return msg
if __name__ == "__main__":
f = FrenchLocalizer()
e = EnglishLocalizer()
s = SpanishLocalizer()
message =
for msg in message:
print(f.localize(msg))
print(e.localize(msg))
print(s.localize(msg))



Solution par méthode d’usine:

Sa solution consiste à remplacer les appels de construction d’objets simples par des appels à la méthode d’usine spéciale. En fait, il n’y aura aucune différence dans la création d’objets, mais ils sont appelés dans la méthode factory.

Par exemple : Nos classes Two_Wheeler, Three_Wheeler et Four_wheeler doivent implémenter l’interface de covoiturage qui déclarera une méthode appelée ride. Chaque classe implémentera cette méthode de manière unique.

 python-factory-patter-solution

solution_factory_diagram

Voyons maintenant la méthode d’usine à l’aide d’un exemple:

class FrenchLocalizer:
def __init__(self):
self.translations = {"car": "voiture", "bike": "bicyclette",
"cycle":"cyclette"}
def localize(self, message):
return self.translations.get(msg, msg)
class SpanishLocalizer:
def __init__(self):
self.translations = {"car": "coche", "bike": "bicicleta",
"cycle":"ciclo"}
def localize(self, msg):
return self.translations.get(msg, msg)
class EnglishLocalizer:
def localize(self, msg):
return msg
def Factory(language ="English"):
localizers = {
"French": FrenchLocalizer,
"English": EnglishLocalizer,
"Spanish": SpanishLocalizer,
}
return localizers()
if __name__ == "__main__":
f = Factory("French")
e = Factory("English")
s = Factory("Spanish")
message =
for msg in message:
print(f.localize(msg))
print(e.localize(msg))
print(s.localize(msg))



Diagramme de classe pour la méthode d’usine:

Regardons le diagramme de classe en considérant l’exemple du covoiturage.

 classe de modèle d'usine

Factory_pattern_class_diagrma

Avantages de l’utilisation de la méthode d’usine:

  1. Nous pouvons facilement ajouter les nouveaux types de produits sans perturber le code client existant.
  2. Généralement, un couplage serré est évité entre les produits et les classes et objets créateurs.

Inconvénients de l’utilisation de la méthode d’usine:

  1. Pour créer un objet produit concret particulier, le client peut devoir sous-classer la classe creator.
  2. Vous vous retrouvez avec un grand nombre de petits fichiers, c’est-à-dire l’encombrement des fichiers.
  3. Applicabilité :

    1. Dans un système graphique, en fonction de l’entrée de l’utilisateur, il peut dessiner différentes formes comme un Rectangle, un Carré, un Cercle, etc. Mais pour la facilité des développeurs et du client, nous pouvons utiliser la méthode factory pour créer l’instance en fonction de l’entrée de l’utilisateur. Ensuite, nous n’avons pas besoin de changer le code client pour ajouter une nouvelle forme.
    2. Dans un site de réservation d’hôtel, nous pouvons réserver un emplacement pour 1 chambre, 2 chambres, 3 chambres, etc. Ici, l’utilisateur peut saisir le nombre de chambres qu’il souhaite réserver. En utilisant la méthode factory, nous pouvons créer une classe factory AnyRooms qui nous aidera à créer l’instance en fonction de l’entrée de l’utilisateur. Encore une fois, nous n’avons pas à modifier le code du client pour ajouter la nouvelle installation.

    Pour en savoir plus: Modèle d’usine en C++

Mots clés de l’article:

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée.

Previous post Dispositif transdermique de Sélégiline (Emsam) pour Trouble dépressif majeur
Next post 6 Signes Que Le Compresseur de votre Climatiseur est mauvais