Document Details

RightPeridot8225

Uploaded by RightPeridot8225

Tags

design patterns software design object-oriented programming software engineering

Summary

This document details design patterns, specifically focusing on creational patterns, such as Singleton and Factory Method. It provides definitions, examples, and use cases, highlighting the importance of these patterns in complex software systems.

Full Transcript

Chapitre 2 I. Introduction aux Patterns Créationnels 1. Définition des Patterns Créationnels : Les patterns créationnels gèrent le processus de création d’objets en masquant la logique de création et en la centralisant. Cela permet de rendre les systèmes plus flexibles en...

Chapitre 2 I. Introduction aux Patterns Créationnels 1. Définition des Patterns Créationnels : Les patterns créationnels gèrent le processus de création d’objets en masquant la logique de création et en la centralisant. Cela permet de rendre les systèmes plus flexibles en termes de gestion d’objets, de réutilisabilité et de découplage des systèmes. Pourquoi les utiliser ? – Dans les systèmes logiciels complexes, la gestion de la création d’objets peut devenir difficile à maintenir, surtout si les objets ont des relations complexes ou des dépendances. Les patterns créationnels permettent de contrôler et simplifier ce processus. 2. Types de Patterns Créationnels : Nous aborderons dans cette séance : – Singleton : Garantir qu’une seule instance d’une classe existe. – Factory Method : Créer des objets en déléguant leur instanci- ation à des sous-classes ou méthodes spécifiques. 3. Exemples de contextes où ces patterns sont nécessaires : Gestion de configurations globales dans une application. Gestion centralisée des connexions à des bases de données. Création d’objets dont le type exact dépend de paramètres dynamiques. II. Le Pattern Singleton 1. Introduction au Singleton : Objectif : Le pattern Singleton garantit qu’une seule instance d’une classe est créée et fournit un accès global à cette instance. Cas d’utilisation communs : – Configuration globale : Une classe qui stocke les paramètres de configuration d’une application. Il serait inefficace d’avoir plusieurs instances de cette classe. – Gestionnaire de connexions : Gestion de la connexion à une base de données où il doit y avoir une seule connexion active pour éviter la surcharge du système. – Système de logging : Assurer qu’un seul gestionnaire de log collecte toutes les informations de manière centralisée. 2. Problèmes résolus par le Singleton : Contrôle du nombre d’instances : Empêcher la création multiple d’une classe là où une seule instance est suffisante ou nécessaire. 1 Accès global : Fournir une manière centralisée d’accéder à une instance unique sans avoir à la passer comme paramètre dans chaque classe. 3. Implémentation du Singleton : En Java : public class Singleton { private static Singleton instance; // Constructeur privé pour empêcher l'instantiation private Singleton() {} public static Singleton getInstance() { if (instance == null) { instance = new Singleton(); } return instance; } } En Python : class Singleton: _instance = None def __new__(cls): if cls._instance is None: cls._instance = super(Singleton, cls).__new__(cls) return cls._instance 4. Problèmes potentiels avec le Singleton : Multithreading : Dans un environnement multithreadé, si deux threads accèdent à getInstance() simultanément avant que l’instance ne soit initialisée, cela peut entraîner la création de plusieurs instances. Cela peut être résolu avec des mécanismes de verrouillage (locking). Dépendance globale : Le Singleton introduit une dépendance glob- ale, ce qui peut rendre le code difficile à tester. Pour éviter cela, on peut envisager des alternatives comme l’injection de dépen- dances. 5. Variante du Singleton en Multithreading (Java) : public class Singleton { private static Singleton instance; private Singleton() {} 2 public static synchronized Singleton getInstance() { if (instance == null) { instance = new Singleton(); } return instance; } } 6. Avantages et inconvénients du Singleton : Avantages : – Contrôle centralisé de la création des objets. – Solution simple pour des cas d’utilisation spécifiques (configura- tions, gestion de connexion, etc.). Inconvénients : – Difficulté à tester : Le Singleton rend les tests unitaires plus compliqués, car il est difficile de remplacer l’instance dans un environnement de test. – Peut conduire à des états globaux non désirés dans un pro- gramme, ce qui complique la gestion du cycle de vie des objets. Exercice Pratique sur le Singleton Objectif : Créer une classe Singleton pour gérer la configuration d’une application avec les paramètres suivants : – Paramètres : URL de la base de données, clé API, chemin de fichier de logs. – S’assurer qu’une seule instance de la classe est créée, même dans un environnement multithreadé. – Ajouter une méthode getConfig() qui retourne ces paramètres sous forme d’un dictionnaire ou d’une liste. III. Le Pattern Factory Method (45 minutes) 1. Introduction au Factory Method : Objectif : Le pattern Factory Method définit une interface pour créer des objets, mais laisse les sous-classes ou les méthodes spéci- fiques décider de la classe à instancier. Cas d’utilisation communs : – Lorsqu’un système doit créer des objets sans savoir exactement quelle classe sera instanciée à l’avance. – Lorsque la logique de création d’objets est complexe ou nécessite des variations selon le contexte (exemple : créer des documents de type PDF, Word, etc.). 3 2. Problèmes résolus par le Factory Method : Encapsulation de la création d’objets : Séparer le code de créa- tion d’objets du reste de l’application. Flexibilité : Permet de changer le type d’objet créé sans toucher au code qui utilise ces objets. 3. Implémentation du Factory Method : En Java : abstract class Document { public abstract void open(); } class WordDocument extends Document { @Override public void open() { System.out.println("Opening Word Document..."); } } class PDFDocument extends Document { @Override public void open() { System.out.println("Opening PDF Document..."); } } abstract class DocumentFactory { public abstract Document createDocument(); } class WordDocumentFactory extends DocumentFactory { @Override public Document createDocument() { return new WordDocument(); } } class PDFDocumentFactory extends DocumentFactory { @Override public Document createDocument() { return new PDFDocument(); } } En Python : class Document: def open(self): pass 4 class WordDocument(Document): def open(self): print("Opening Word Document...") class PDFDocument(Document): def open(self): print("Opening PDF Document...") class DocumentFactory: def create_document(self): pass class WordDocumentFactory(DocumentFactory): def create_document(self): return WordDocument() class PDFDocumentFactory(DocumentFactory): def create_document(self): return PDFDocument() 4. Avantages et inconvénients du Factory Method : Avantages : – Découplage entre la logique de création d’objets et le code qui les utilise. – Facilité d’ajout de nouveaux types d’objets sans modifier le code existant. Inconvénients : – Nécessite parfois beaucoup de sous-classes, surtout dans des sys- tèmes complexes. – Peut augmenter la complexité si mal utilisé ou surutilisé. 5. Différence avec l’Abstract Factory : Factory Method s’occupe de la création d’un type d’objet à la fois, tandis que Abstract Factory gère la création de familles d’objets interconnectés (nous le verrons en détail lors de la prochaine séance). Exercice Pratique sur le Factory Method Objectif : Implémenter une Factory Method pour un système de ges- tion de formes géométriques où l’utilisateur peut créer soit des Cercle, soit des Carré, selon les besoins. – Étendre la solution pour permettre l’ajout futur de nouveaux types de formes sans modifier le code existant. 5

Use Quizgecko on...
Browser
Browser