Modèle de conception Python
Aperçu
Le développement de logiciels modernes doit répondre à des exigences commerciales complexes. Il doit également prendre en compte des facteurs tels que l'extensibilité et la maintenabilité futures. Une bonne conception d'un système logiciel est essentielle pour atteindre ces objectifs. Les modèles de conception jouent un rôle important dans ces systèmes.
Pour comprendre le modèle de conception, considérons l'exemple ci-dessous -
La conception de chaque voiture suit un modèle de conception de base, quatre roues, un volant, le système d'entraînement de base comme l'accélérateur-frein-embrayage, etc.
Ainsi, toutes les choses construites / produites à plusieurs reprises suivront inévitablement un modèle dans sa conception .. il voitures, vélos, pizzas, distributeurs automatiques, peu importe… même votre canapé-lit.
Les conceptions qui sont presque devenues un moyen standard de coder une logique / un mécanisme / une technique dans un logiciel, sont donc connues sous le nom de modèles de conception de logiciels ou étudiées.
Pourquoi le modèle de conception est-il important?
Les avantages de l'utilisation des modèles de conception sont:
Vous aide à résoudre les problèmes de conception courants grâce à une approche éprouvée.
Aucune ambiguïté dans la compréhension car ils sont bien documentés.
Réduisez le temps de développement global.
Vous aide à gérer les futures extensions et modifications plus facilement qu'autrement.
Peut réduire les erreurs dans le système car il s'agit de solutions éprouvées à des problèmes courants.
Classification des modèles de conception
Les modèles de conception du GoF (Gang of Four) sont classés en trois catégories à savoir créatives, structurelles et comportementales.
Modèles créatifs
Les modèles de conception créative séparent la logique de création d'objet du reste du système. Au lieu de créer des objets, des modèles créatifs les créent pour vous. Les modèles de création incluent Abstract Factory, Builder, Factory Method, Prototype et Singleton.
Les modèles de création ne sont pas couramment utilisés en Python en raison de la nature dynamique du langage. Le langage lui-même nous offre également toute la flexibilité dont nous avons besoin pour créer d'une manière suffisamment élégante, nous avons rarement besoin d'implémenter quoi que ce soit par-dessus, comme singleton ou Factory.
Ces modèles fournissent également un moyen de créer des objets tout en masquant la logique de création, plutôt que d'instancier des objets directement à l'aide d'un nouvel opérateur.
Modèles structurels
Parfois, au lieu de partir de zéro, vous devez créer des structures plus grandes à l'aide d'un ensemble de classes existant. C'est là que les modèles de classes structurelles utilisent l'héritage pour créer une nouvelle structure. Les modèles d'objets structurels utilisent la composition / agrégation pour obtenir une nouvelle fonctionnalité. L'adaptateur, le pont, le composite, le décorateur, la façade, le poids mouche et le proxy sont des motifs structurels. Ils offrent les meilleurs moyens d'organiser la hiérarchie des classes.
Modèles de comportement
Les modèles comportementaux offrent les meilleurs moyens de gérer la communication entre les objets. Les modèles relèvent de ces catégories: Visiteur, Chaîne de responsabilité, Commande, Interprète, Itérateur, Médiateur, Mémento, Observateur, État, Stratégie et Méthode de modèle sont des modèles comportementaux.
Parce qu'ils représentent le comportement d'un système, ils sont généralement utilisés pour décrire la fonctionnalité des systèmes logiciels.
Modèles de conception couramment utilisés
Singleton
C'est l'un des modèles de conception les plus controversés et les plus célèbres. Il est utilisé dans des langages trop orientés objet et constitue une partie essentielle de la programmation traditionnelle orientée objet.
Le modèle Singleton est utilisé pour,
Lorsque la journalisation doit être mise en œuvre. L'instance de journalisation est partagée par tous les composants du système.
Les fichiers de configuration l'utilisent car le cache des informations doit être conservé et partagé par tous les différents composants du système.
Gérer une connexion à une base de données.
Voici le diagramme UML,
class Logger(object):
def __new__(cls, *args, **kwargs):
if not hasattr(cls, '_logger'):
cls._logger = super(Logger, cls).__new__(cls, *args, **kwargs)
return cls._logger
Dans cet exemple, Logger est un Singleton.
Lorsque __new__ est appelé, il construit normalement une nouvelle instance de cette classe. Lorsque nous la remplaçons, nous vérifions d'abord si notre instance de singleton a été créée ou non. Sinon, nous le créons à l'aide d'un super appel. Ainsi, chaque fois que nous appelons le constructeur sur Logger, nous obtenons toujours exactement la même instance.
>>>
>>> obj1 = Logger()
>>> obj2 = Logger()
>>> obj1 == obj2
True
>>>
>>> obj1
<__main__.Logger object at 0x03224090>
>>> obj2
<__main__.Logger object at 0x03224090>