0% ont trouvé ce document utile (0 vote)
9 vues13 pages

Introduction au patron Abstract Factory

abstract factory design pattern

Transféré par

stepbysteptoUranus
Copyright
© All Rights Reserved
Nous prenons très au sérieux les droits relatifs au contenu. Si vous pensez qu’il s’agit de votre contenu, signalez une atteinte au droit d’auteur ici.
Formats disponibles
Téléchargez aux formats PDF, TXT ou lisez en ligne sur Scribd
0% ont trouvé ce document utile (0 vote)
9 vues13 pages

Introduction au patron Abstract Factory

abstract factory design pattern

Transféré par

stepbysteptoUranus
Copyright
© All Rights Reserved
Nous prenons très au sérieux les droits relatifs au contenu. Si vous pensez qu’il s’agit de votre contenu, signalez une atteinte au droit d’auteur ici.
Formats disponibles
Téléchargez aux formats PDF, TXT ou lisez en ligne sur Scribd

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

Vous aimerez peut-être aussi