Chapitre 2
PATRONS DE CREATION
 
 
Précédent Suivant
 
Patrons de création
Patrons de création (1/2)
* Abstraction du processus de création
* Indépendance du type réel
* Indépendance de l'initialisation
* Indépendance de la composition
* Niveau classe
* Utilisation de l'héritage
* Niveau objet
* Délégation de l'instanciation
* Utiles pour la création d'objets par composition
* Une tendance actuelle des systèmes logiciels
* Component-Based Development
* Introduit de la flexibilité dans l'assemblage
Patrons de création (2/2)
* (Méthode) Fabrique / Factory Method
* Déléguer la création d'un objet
* Fabrique abstraite / Abstract Factory
* Créer une famille d'objets cohérents
* Monteur / Builder
* Séparer la construction d'un objet complexe de sa représentation
* Prototype / Prototype
* Créer un objet par clonage d'une instance modèle
* Singleton / Singleton
* Garantir une seule instance pour une classe
(Méthode) Fabrique / Factory Method (1/4)
* Objectif
* Déléguer la création d'un objet
* Principe
* Définir une interface pour créer un objet ==> le "créateur"
* Le processus de création peut être changé par héritage
* Le client demande au créateur de lui fournir une instance
* Le client ne connaît que l'interface de l'objet
* Seul le créateur connaît la classe réelle de l'objet
* Motivation
* Application qui manipule des documents de types différents
(Méthode) Fabrique / Factory Method (2/4)
(Méthode) Fabrique / Factory Method (3/4)
(Méthode) Fabrique / Factory Method (4/4)
* Méthode "créerProduit" = méthode "fabrique"
* Appelé aussi "constructeur virtuel"
* Intérêt
* Isolation de la classe concrète
* Créateur responsable de la création
* La méthode fabrique peut choisir le type d'objet à créer
* Exemple: créerProduit(type:Chaîne)
* Relations avec d'autres patrons
* Fabrique abstraite
* Utilise la fabrique dans son implémentation
* Méthode patron
* La méthode fabrique est une méthode patron
Fabrique abstraite / Abstract Factory (1/4)
* Objectif
* Créer une famille d'objets cohérents
* Des objets de classes différentes sont à créer
* Mais les classes doivent être cohérentes entre elles
* Principe
* Fournir une interface pour créer une famille d'objets ==> la "fabrique"
* Le client demande à la fabrique de lui fournir des instances
* Le client ne connaît que les interfaces des objets
* Seule la fabrique connaît les classes réelles des objets
* Motivation
* Système indépendant de l'interface graphique
* Créer des composants graphiques cohérents selon la plateforme
Fabrique abstraite / Abstract Factory (2/4)
Fabrique abstraite / Abstract Factory (3/4)
Fabrique abstraite / Abstract Factory (4/4)
* Appelé aussi "kit"
* Intérêts
* Isolation des classes concrètes
* Fabrique responsable de la création
* Echange de famille de produits très facile
* Remplacer la fabrique concrète par une autre
* Relations avec d'autres patrons
* Singleton
* Souvent, une seule instance de chaque fabrique
* (Méthode) Fabrique
* Une méthode fabrique par type de produit
Monteur / Builder (1/4)
* Objectif
* Séparer la construction d'un objet complexe de sa représentation
* Même processus de construction mais représentations différentes
* Principe
* Un "directeur" construit une structure complexe
* Il délègue la création des parties à un "monteur"
* Le directeur ne connaît que l'interface des parties
* Seul le monteur connaît la classe réelle des parties
* Motivation
* Conversion d'un format de fichier vers un format cible
* Le format cible peut changer
Monteur / Builder (2/4)
Monteur / Builder (3/4)
Monteur / Builder (4/4)
* Intérêts
* Isolation de la construction et de la représentation
* Le processus de création des parties est masqué
* Le processus d'assemblage des parties est masqué
* Echange de représentation d'une structure complexe facile
* Remplacer le monteur concret par un autre
* Malgré l'abstraction, contrôle précis du processus de création
* Produit construit pas à pas
* Sous la supervision du directeur
* Accès au produit une fois le processus terminé
* Relations avec d'autres patrons
* Fabrique abstraite
* Fabrique abstraite = construction d'une famille de produits
* Monteur = construction pas à pas d'un produit complexe
Prototype / Prototype (1/4)
* Objectif
* Créer un objet par clonage d'une instance modèle
* Le type de l'objet est déterminé par celui de l'instance modèle
* Principe
* Un objet "prototype" est fourni
* Il possède une méthode de clonage
* Le client utilise cette méthode pour obtenir une copie de l'objet
* Motivation
* Boîte à outils: déposer des objets par drag-and-drop
* Une copie du modèle est déposée sur la zone de travail
Prototype / Prototype (2/4)
Prototype / Prototype (3/4)
Prototype / Prototype (4/4)
* Intérêts
* Abstraction de la construction
* 2 instances différentes ==> 2 initialisations différentes
* Utile lorsque la phase d'initialisation est coûteuse
* Plus rapide de recopier une instance
* Relations avec d'autres patrons
* Fabrique abstraite
* Peut utiliser des prototypes pour créer les objets
* En Java
* Tous les objets appartiennent à la classe "Object"
* Cette classe fournit une méthode "clone"
Singleton / Singleton (1/3)
* Objectif
* Garantir une seule instance pour une classe
* Fournir un point d'accès global à cette instance
* Principe
* Masquer les constructeurs de cette classe
* Impossibilité de créer un objet en dehors de la classe
* Fournir une méthode de classe qui retourne l'objet unique
* Motivation
* Représentation de ressources physiques uniques
* Exemple: flux d'entrée et sortie standards
Singleton / Singleton (2/3)
* Exemple Java
public class Singleton {
private static Singleton unique;
// Attributs du singleton
private Singleton(...) { ... }
public static Singleton getInstance() {
if (unique == null)
unique = new Singleton(...);
return unique;
}
// Méthodes du singleton
}
* Création d'un objet
* Interdit: new Singleton(...)
* Autorisé: Singleton.getInstance()
Singleton / Singleton (3/3)
* Intérêts
* Contrôler la création des objets d'une classe
* Permet notamment d'imposer le nombre d'instances
* Contrôler l'accès aux instances
* Exemple: accès protégé pour le multithreading
* Fournit un espace de nommage
* Alternative aux variables globales
* Alternative aux fonctions
* Extension possible par héritage
* Relations avec d'autres patrons
* Fabrique abstraite / Monteur / Prototype
* Ils peuvent utiliser le singleton dans leur implémentation