Modèle d’usine

 Jean-Pierre
Sean Bradley

Suivre

9 Avr. 2019 * 4 min de lecture

Lors du développement de code, vous pouvez instancier des objets directement dans des méthodes ou dans des classes. Bien que cela soit tout à fait normal, vous voudrez peut-être ajouter une abstraction supplémentaire entre la création de l’objet et l’endroit où il est utilisé dans votre projet.

Vous pouvez utiliser le modèle d’usine pour ajouter cette abstraction supplémentaire. Le modèle d’usine est l’un des modèles les plus faciles à comprendre et à mettre en œuvre.

L’ajout d’une abstraction supplémentaire vous permettra également de choisir dynamiquement des classes à instancier en fonction d’une sorte de logique.

Avant l’abstraction, votre classe ou méthode créerait directement une classe concrète. Après avoir ajouté l’abstraction d’usine, la classe concrete est maintenant créée en dehors de la classe / méthode actuelle, et maintenant dans une sous-classe.

Imaginez une application pour la conception de maisons et la maison a une chaise déjà ajoutée au sol par défaut. En ajoutant le modèle d’usine, vous pouvez donner à l’utilisateur la possibilité de choisir différentes chaises, et combien au moment de l’exécution. Au lieu que la chaise soit codée en dur dans le projet au démarrage, l’utilisateur a maintenant la possibilité de choisir.

L’ajout de cette abstraction supplémentaire signifie également que les complications de l’instanciation d’objets supplémentaires peuvent désormais être masquées de la classe ou de la méthode qui l’utilise.

Cette séparation rend également votre code plus facile à lire et à documenter.

Le modèle d’usine consiste vraiment à ajouter cette abstraction supplémentaire entre la création de l’objet et l’endroit où il est utilisé. Cela vous donne des options supplémentaires que vous pouvez plus facilement étendre à l’avenir.

  • Creator concret : L’application, la classe ou la méthode cliente qui appelle le Creator (méthode d’usine).
  • Interface Produit : Interface décrivant les attributs et méthodes dont l’usine aura besoin pour créer le produit/objet final.
  • Créateur : La classe Factory. Déclare la méthode d’usine qui retournera l’objet qui lui a été demandé.
  • Produit en béton : L’objet retourné de l’usine. L’objet implémente l’interface du produit.

Diagramme UML d’usine

Schéma d’usine Diagramme UML

Code source

Dans cet exemple de concept, le client souhaite un objet nommé b

Plutôt que de créer b directement dans le client, il demande au créateur (usine) l’objet à la place.

La fabrique trouve la classe pertinente en utilisant une sorte de logique à partir des attributs de la requête. Il demande ensuite à la sous-classe d’instancier le nouvel objet qu’elle renvoie ensuite comme référence au client qui le demande.

. /factory/factory_concept.py

"""
The Factory Pattern Concept
https://sbcode.net/python/factory/#factoryfactory_conceptpy
"""from abc import ABCMeta, abstractmethodclass IProduct(metaclass=ABCMeta):
"A Hypothetical Class Interface (Product)" @staticmethod
@abstractmethod
def create_object():
"An abstract interface method"class ConcreteProductA(IProduct):
"A Concrete Class that implements the IProduct interface" def __init__(self):
self.name = "ConcreteProductA" def create_object(self):
return selfclass ConcreteProductB(IProduct):
"A Concrete Class that implements the IProduct interface" def __init__(self):
self.name = "ConcreteProductB" def create_object(self):
return selfclass ConcreteProductC(IProduct):
"A Concrete Class that implements the IProduct interface" def __init__(self):
self.name = "ConcreteProductC" def create_object(self):
return selfclass Creator:
"The Factory Class" @staticmethod
def create_object(some_property):
"A static method to get a concrete product"
if some_property == 'a':
return ConcreteProductA()
if some_property == 'b':
return ConcreteProductB()
if some_property == 'c':
return ConcreteProductC()
return None# The Client
PRODUCT = Creator().create_object('b')
print(PRODUCT.name)

Sortie

python ./factory/factory_concept.py 
ConcreteProductB

Vidéo de présentation du modèle d’usine

Exemple De Cas D’Utilisation

Visite Des Modèles De Conception D’Usine En Python (sbcode.net ) pour un exemple de cas d’utilisation du modèle d’usine.

Un exemple de cas d’utilisation est une interface utilisateur dans laquelle l’utilisateur peut sélectionner dans un menu d’éléments, tels que des chaises.

L’utilisateur a eu le choix d’utiliser une sorte d’interface de navigation, et on ne sait pas quel choix, ni combien l’utilisateur en fera jusqu’à ce que l’application soit réellement en cours d’exécution et que l’utilisateur commence à l’utiliser.

Ainsi, lorsque l’utilisateur a sélectionné le fauteuil, la fabrique prend alors une propriété impliquée dans cette sélection, telle qu’un ID, un Type ou un autre attribut, puis décide de la sous-classe pertinente à instancier afin de renvoyer l’objet approprié.

Exemple du monde réel du modèle d’usine utilisé

Voir le gif ci-dessus pour un exemple très graphique d’un exemple du monde réel d’utilisation du modèle d’usine pour renvoyer des objets de chaise. Le panneau de gauche contient des chaises, et lorsque vous faites glisser et déposez une chaise sur le panneau de droite, il appelle l’usine de chaises pour lui rendre une chaise.

Vidéo de cas d’utilisation du modèle d’usine

Résumé

  • Le modèle d’usine est une interface qui reporte la création de l’objet final à une sous-classe.
  • Le modèle d’usine consiste à insérer un autre calque / abstraction entre l’instanciation d’un objet et l’endroit où il est réellement utilisé dans votre code.
  • On ne sait pas quoi ou combien d’objets devront être créés jusqu’à l’exécution.
  • Vous souhaitez localiser la connaissance des spécificités de l’instanciation d’un objet particulier dans la sous-classe afin que le client n’ait pas besoin de se soucier des détails.
  • Vous souhaitez créer un framework externe, qu’une application peut importer / référencer, et masquer les détails des spécificités impliquées dans la création de l’objet / produit final.
  • Le facteur unique qui définit le modèle d’usine est que votre projet reporte désormais la création d’objets à la sous-classe à laquelle l’usine l’avait déléguée.

Modèles de conception En Python (Livre)

Parfois, vous voulez juste éteindre votre ordinateur et lire un livre. Donc, ce modèle, ainsi que tous les autres modèles GoF sont discutés dans mes Modèles de conception Dans le livre Python ASIN B08XLJ8Z2J