Le Modèle de Conception de Méthode d’Usine en Python

Introduction

Dans cet article, nous allons plonger dans le Modèle de Conception de Méthode d’usine, implémenté en Python.

Les modèles de conception définissent des solutions éprouvées à divers problèmes récurrents dans le développement de logiciels. Ils ne représentent pas du code réel, mais plutôt des moyens d’organiser notre code pour obtenir des résultats optimaux.

Dans un monde de ressources limitées, les modèles de conception nous aident à obtenir le plus de résultats avec le moins de ressources utilisées. Il est également important de noter que les modèles de conception ne s’appliquent pas à toutes les situations et qu’il est crucial d’évaluer le problème en question afin de choisir la meilleure approche pour ce scénario particulier.

Les Modèles de Conception sont divisés en quelques grandes catégories, mais principalement en Modèles de Création, Modèles Structurels et Modèles Comportementaux.

Le modèle de méthode d’usine est un modèle de Conception de Création.

Le modèle de conception de la méthode d’usine

Définition

La méthode d’usine est utilisée dans la programmation orientée objet comme moyen de fournir des interfaces d’usine pour la création d’objets. Ces interfaces définissent la structure générique, mais n’initialisent pas les objets. L’initialisation est laissée à des sous-classes plus spécifiques.

La classe/interface parent abrite tous les comportements standard et génériques qui peuvent être partagés entre les sous-classes de différents types. La sous-classe est à son tour responsable de la définition et de l’instanciation de l’objet en fonction de la superclasse.

Motivation

La principale motivation derrière le modèle de conception de méthode d’usine est d’améliorer le couplage lâche dans le code grâce à la création d’une classe abstraite qui sera utilisée pour créer différents types d’objets qui partagent des attributs et des fonctionnalités communs.

Cela entraîne une flexibilité et une réutilisation accrues du code car la fonctionnalité partagée ne sera pas réécrite après avoir été héritée de la même classe. Ce modèle de conception est également connu sous le nom de constructeur virtuel.

Le modèle de conception de méthode d’usine est couramment utilisé dans les bibliothèques en permettant aux clients de choisir la sous-classe ou le type d’objet à créer via une classe abstraite.

Une méthode d’usine recevra des informations sur un objet requis, l’instanciera et renverra l’objet du type spécifié. Cela donne à notre application ou à notre bibliothèque un point d’interaction unique avec d’autres programmes ou morceaux de code, encapsulant ainsi notre fonctionnalité de création d’objets.

Implémentation de la méthode d’usine

Notre programme va être une bibliothèque utilisée pour gérer les objets de forme en termes de création et d’autres opérations telles que l’ajout de couleur et le calcul de l’aire de la forme.

Les utilisateurs devraient pouvoir utiliser notre bibliothèque pour créer de nouveaux objets. Nous pouvons commencer par créer des formes individuelles uniques et les utiliser telles quelles, mais cela signifierait que beaucoup de logiques partagées devront être réécrites pour chaque forme dont nous disposons.

La première étape pour résoudre cette répétition serait de créer une classe de forme parent qui a des méthodes telles que calculate_area() et calculate_perimeter(), et des propriétés telles que les dimensions.

Les objets de forme spécifiques hériteront alors de notre classe de base. Pour créer une forme, nous devrons identifier le type de forme requis et créer la sous-classe pour celle-ci.

Nous allons commencer par créer une classe abstraite pour représenter une forme générique:

C’est la classe de base pour toutes nos formes. Allons de l’avant et créons plusieurs formes concrètes, plus spécifiques:

Jusqu’à présent, nous avons créé une classe abstraite et l’avons étendue à différentes formes qui seront disponibles dans notre bibliothèque. Afin de créer les différents objets de forme, les clients devront connaître les noms et les détails de nos formes et effectuer séparément la création.

C’est là que la méthode d’usine entre en jeu.

Le modèle de conception de la méthode d’usine nous aidera à abstraire les formes disponibles du client, c’est-à-dire que le client n’a pas à connaître toutes les formes disponibles, mais à créer uniquement ce dont il a besoin pendant l’exécution. Cela nous permettra également de centraliser et d’encapsuler la création de l’objet.

Réalisons cela en créant un ShapeFactory qui sera utilisé pour créer les classes de formes spécifiques en fonction de l’entrée du client:

Ceci est notre interface de création. Nous n’appelons pas les constructeurs de classes de béton, nous appelons l’usine et lui demandons de créer une forme.

Notre ShapeFactory fonctionne en recevant des informations sur une forme telle qu’un nom et les dimensions requises. Notre méthode d’usine create_shape() sera ensuite utilisée pour créer et retourner des objets prêts aux formes souhaitées.

Le client n’a rien à savoir sur la création ou les spécificités de l’objet. En utilisant l’objet factory, ils peuvent créer des objets avec une connaissance minimale de leur fonctionnement:

L’exécution de ce code entraînera:

Ou, nous pourrions construire une autre forme:

Ce qui est à noter, c’est qu’en plus le client n’a pas à en savoir beaucoup sur le processus de création – lorsque nous souhaitons instancier un objet, nous n’appelons pas le constructeur de la classe. Nous demandons à l’usine de le faire pour nous en fonction des informations que nous transmettons à la fonction create_shape().

Avantages et inconvénients

Avantages

L’un des principaux avantages de l’utilisation du modèle de conception de la méthode d’usine est que notre code devient faiblement couplé en ce que la majorité des composants de notre code ne connaissent pas d’autres composants de la même base de code.

Il en résulte un code facile à comprendre, à tester et à ajouter plus de fonctionnalités à des composants spécifiques sans affecter ni casser l’ensemble du programme.

Le modèle de conception de la méthode d’usine aide également à respecter le principe de responsabilité unique où les classes et les objets qui gèrent des fonctionnalités spécifiques aboutissent à un meilleur code.

Inconvénients

La création de plus de classes conduit finalement à moins de lisibilité. S’il est combiné avec une usine abstraite (usine des usines), le code deviendra bientôt verbeux, cependant, maintenable.

Conclusion

En conclusion, le modèle de conception de la méthode d’usine nous permet de créer des objets sans spécifier la classe exacte requise pour créer l’objet particulier. Cela nous permet de découpler notre code et améliore sa réutilisabilité.

Il est important de noter que, comme tout autre modèle de conception, il ne convient qu’à des situations spécifiques et non à tous les scénarios de développement. Une évaluation de la situation actuelle est cruciale avant de décider de mettre en œuvre le modèle de conception de la méthode d’usine pour en tirer parti.

Laisser un commentaire

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