Le patron
Abstract Factory
Cours DP– Mme Sameh HBAIEB
Le patron Abstract Factory : Problématique
Problématique:
Imaginons la création d’un simulateur pour un
magasin de meubles. Votre code contient les
classes suivantes :
Une famille de produits appartenant à un même
thème : Chaise + Sofa + TableBasse.
Plusieurs variantes de cette famille.
Par exemple, les produits Chaise + Sofa + TableBasse
sont disponibles dans les variantes suivantes :
Moderne, Victorien, ArtDéco.
Cours DP– Mme Sameh HBAIEB
Le patron Abstract Factory : Solution
Solution:
Création d’une AbstractFactory (Classe abstraite/interface) qui permet de
créer des familles d’objets reliés.
Fabrique abstraite est un patron de conception qui permet de créer des
familles d’objets apparentés (liées par une relation d’héritage) sans préciser
leur classe concrète.
Le principe consiste à définir une interface contenant plusieurs méthodes de
création d’objets et implémenter cette interface avec des classes qui
garantiront une cohérence entre les différents objets créés.
Cours DP– Mme Sameh HBAIEB
Modèle de représentation du patron Abstract
Factory
Modèle UML:
Famille 1
Famille 2
Cours DP– Mme Sameh HBAIEB
Le patron Abstract Factory : Domaines d’utilisation
Le pattern est utilisé dans les domaines suivants :
Un système utilisant des produits a besoin d’être indépendant de la façon
dont ces produits sont créés et regroupés.
Un système est paramétré par plusieurs familles de produits qui peuvent
évoluer.
Cours DP– Mme Sameh HBAIEB
Le patron Abstract Factory : Exemple 1
Exemple d’application de Abstract Factory :
Pour chaque variante d’une famille de
produits (Victorian, Modern, etc), nous
créons une classe fabrique qui
implémente l’interface FurnitureFactory.
Famille 1 Famille 2 Une fabrique est une classe qui retourne
un certain type de produits. Par exemple,
ModernFurnitureFactory peut
uniquement créer des ChaiseModerne,
des SofaModerne et des
TableBasseModerne.
Cours DP– Mme Sameh HBAIEB
Le patron Abstract Factory : Exemple 2
Famille 1 Famille 2
Cours DP– Mme Sameh HBAIEB
Le patron Abstract Factory : Exemple 2
public abstract class AbstractFactory {
abstract Shape getShape(String shapeType) ;
}
public class ShapeFactory extends AbstractFactory { public class RoundedShapeFactory extends AbstractFactory {
@Override @Override
public Shape getShape(String shapeType){ public Shape getShape(String shapeType){
if([Link]("RECTANGLE")){ if([Link]("RECTANGLE")){
return new Rectangle(); return new RoundedRectangle();
}else if([Link]("SQUARE")){ }else if([Link]("SQUARE")){
return new Square(); return new RoundedSquare();
} }
return null; return null;
} }
} }
Cours DP– Mme Sameh HBAIEB
public class FactoryProducer {
public static AbstractFactory getFactory(boolean rounded){
if(rounded){
return new RoundedShapeFactory(); public class AbstractFactoryPatternDemo {
}else{ public static void main(String[] args) {
return new ShapeFactory(); //get shape factory
} AbstractFactory shapeFactory = [Link](false);
} //get an object of Shape Rectangle
} Shape shape1 = [Link]("RECTANGLE");
//call draw method of Shape Rectangle
[Link]();
Création d’un objet ShapeFactory //get an object of Shape Square
Shape shape2 = [Link]("SQUARE");
//call draw method of Shape Square
[Link]();
Avec même instruction: [Link]() //get shape factory
AbstractFactory shapeFactory1 = [Link](true);
//get an object of Shape Rectangle
Shape shape3 = [Link]("RECTANGLE");
//call draw method of Shape Rectangle
Création d’un objet RoundedShapeFactory [Link]();
//get an object of Shape Square
Shape shape4 = [Link]("SQUARE");
//call draw method of Shape Square
[Link]();
Cours DP– Mme Sameh HBAIEB }}
Exercice d’application: Enoncé
Le système de vente de véhicules gère des véhicules fonctionnant à l’essence et
des véhicules fonctionnant à l’électricité. Cette gestion est confiée à l’objet
Catalogue qui crée de tels objets. Un catalogue de véhicules est composé de
plusieurs véhicules répartis en deux catégories: Scooter et Automobile.
1. Présentez une modélisation de l’hiérarchie des classes Véhicule sachant que
chaque Automobile est caractérisée par un modèle, une couleur, une puissance
et un espace; et chaque scooter est caractérisée par un modèle, une couleur et
une puissance.
2. Appliquez le patron Abstract Factory pour la création de véhicules
3. Créez une classe cliente qui permet de définir un catalogue composé d’un
scooter avec essence et d’une automobile électrique et d’afficher leurs
caractéristiques
Cours DP– Mme Sameh HBAIEB
Exercice d’application: Modèle de catalogue de
véhicules
Cours DP– Mme Sameh HBAIEB
Question de synthèse
Différences entre les patrons Factory Method et Abstract Factory?
Cours DP– Mme Sameh HBAIEB
Question de synthèse
Critère Factory Method Abstract Factory
Abstraction Moins élevé Plus élevé
Objets Création d’objets d’un type Création d’objets de types
unique apparentés
Caractéristiques Simple Robuste
Facile à implémenter et à Évolutif
maintenir Extensible
Implémentation Une classe Factory + interface Une interface Abstract Factory +
pour les produits plusieurs classes Factory
concrètes + plusieurs interfaces
pour les produits
C’est un ensemble de factory
Cours DP– Mme Sameh HBAIEB