SlideShare ist ein Scribd-Unternehmen logo
1 von 29
Le patron
« Factory Method »
Université de Sfax
Faculté de science économique et gestion de Sfax
Année universitaire 2015-2016
Présenté par:
Mlle. Hibatallah AOUADNI Mlle. Khouloud KAMMOUN Mr. Melek ELLOUZE
Plan
Introduction
Factory Simple
Factory Method
Conclusion
2
INTRODUCTION
3
Introduction
Factory Method est l’un des patrons de conception les plus utilisés
Livré sous pattern créative et celui-ci fournit l’une des meilleurs façons pour créer un
objet
4
Objet
Interface
Contexte | Problématique | Solution
Introduction
5
Vêtement
Maillot RobePantalon
Robe robe = new Robe();
Ce code va générer des problèmes lors de l’ajout ou la
suppression des produits
Contexte | Problématique | Solution
Exception
Introduction
6
Vêtement
Maillot RobePantalon
Il est fort probable que l’instanciation des différents produit
soit également réalisée dans d’autres classes
Catalogue
Boutique
On se retrouve avec un code fortement couplé, qui risque
d’être dupliqué à plusieurs endroits de l’application
Contexte | Problématique | Solution
Introduction
7
Vêtement
Maillot RobePantalon
Catalogue
Boutique
Contexte | Problématique | Solution
SimpleFactory
On évite la duplication de code
Catalogue Boutique
On facilite l'évolution au niveau de
la gamme des produits.
SIMPLE FACTORY
8
Simple Factory
9
Présentation| Conception| Implémentation
La Fabrique Simple est chargée d'instancier
et de retourner le Produit Concret attendu
L'utilisateur du produit fait appel à la
Fabrique Simple pour obtenir un Produit.
L'utilisateur du produit est donc fortement couplé uniquement à la Fabrique
Simple et non à tous les produits qu'il prend en charge.
Simple Factory
10
String modele
int coutCouture
int tempsCouture
ArrayList<String> couleurs
consommeCoutTemps()
Colorer()
Vêtement
MaillotColMontePantalon
Présentation| Conception| Implémentation
MainSimple
coudreVetement()
SimpleFactory
public abstract class Vetement {
protected String modele;
protected int coutCouture;
protected int tempsCouture;
protected ArrayList<String> couleurs;
public void consommeCoutTemps(){
System.out.println("la couture
consomme:"+this.coutCouture+"DT et
"+this.tempsCouture+"h");
}
public abstract void
colorer(ArrayList<String> couleurs);
public String toString() {
String str = "Modele:
"+this.modele+"n";
str += "Cout de
couture:"+this.coutCouture+"n";
str += "Temps de
couture:"+this.tempsCouture+"n";
str += "Couleurs disponibles: ";
for(int i=0; i<this.couleurs.size(); i++)
{
str += this.couleurs.get(i)+" ";
}
return str;
}
}
11
Présentation| Conception| Implémentation
Simple Factory
Vetement.java
public class Pantalon extends Vetement{
public Pantalon(String modele) {
this.modele = modele;
this.coutCouture = 20;
this.tempsCouture = 6;
this.couleurs = new ArrayList<String>();
}
public void colorer(ArrayList<String> couleurs) {
for(int i=0; i<couleurs.size();i++){
this.couleurs.add(couleurs.get(i));
}
}
}
12
Présentation| Conception| Implémentation
Simple Factory
Pantalon.java
public class MaillotColMonte extends Vetement{
public MaillotColMonte(String modele) {
this.modele = modele;
this.coutCouture = 30;
this.tempsCouture = 10;
this.couleurs = new ArrayList<String>();
}
public void colorer(ArrayList<String> couleurs) {
for(int i=0; i<couleurs.size();i++){
this.couleurs.add(couleurs.get(i));
}
}
}
13
Présentation| Conception| Implémentation
Simple Factory
MaillotColMonte.java
public enum TypeVetement {
PANTALON,
MAILLOT,
ROBE
}
14
Présentation| Conception| Implémentation
Simple Factory
TypeUnite.java
public class SimpleFactory {
public Vetement coudreVetement(TypeVetement type,String modele){
Vetement vet = null;
switch(type)
{
case PANTALON:vet=new Pantalon(modele);break;
case MAILLOT:vet = new MaillotColMonte(modele);break;
}
return vet;
}
}
15
Présentation| Conception| Implémentation
Simple Factory
SimpleFactory.java
public class Factory {
private SimpleFactory simpleFactory;
public Factory() {
super();
this.simpleFactory = new SimpleFactory();}
public Vetement creerModele(TypeVetement type,String
modele,ArrayList<String> listCouleurs){
Vetement vet = this.simpleFactory.coudreVetement(type,
modele);
vet.consommeCoutTemps();
vet.colorer(listCouleurs);
return vet;}
}
16
Présentation| Conception| Implémentation
Simple Factory
Factory.java
public class MainSimple {
public static void main(String[] args) {
Factory factory = new Factory();
ArrayList<String> listCouleurs = new ArrayList<String>();
listCouleurs.add("bleu");
listCouleurs.add("noir");
Vetement vet = factory.creerModele(TypeVetement.PANTALON, "pantalon
jeans",listCouleurs);
System.out.println(vet);
}
}
17
Présentation| Conception| Implémentation
Simple Factory
MainSimple.java
la couture consomme:20DT et 6h
Modele: pantalon jeans
Cout de couture:20
Temps de couture:6
Couleurs disponibles: bleu noir
FACTORY METHOD
18
Factory Method
19
Présentation| Conception| Implémentation
L'entreprise évolue et a besoin de deux usines, chacune spécialisée
dans la fabrication de certains produits.
Fabrique Simple ne va plus suffire.
Vêtement
Pantalon
MainMethod
FactorySummer
MaillotColMonte
FactoryWinter
Factory Method
20
MaillotColMonte
Pantalon
Présentation| Conception| Implémentation
MainMethod
String modele
int coutCouture
int tempsCouture
ArrayList<String> couleurs
consommeCoutTemps()
Colorer()
Vêtement
Short
MaillotDemiManche
coudreVetement()
FactorySummer
coudreVetement()
FactoryWinter
creerModele(type,modele,listCouleurs)
Factory
21
Présentation| Conception| Implémentation
Factory Method
Short.java
public class Short extends Vetement{
public Short(String modele) {
this.modele = modele;
this.coutCouture = 15;
this.tempsCouture = 5;
this.couleurs = new ArrayList<String>();
}
public void colorer(ArrayList<String> couleurs) {
for(int i=0; i<couleurs.size();i++){
this.couleurs.add(couleurs.get(i));
}
}
}
22
Présentation| Conception| Implémentation
Factory Method
MaillotDemiManche.java
public class MaillotDemiManche extends Vetement{
public MaillotDemiManche(String modele) {
this.modele = modele;
this.coutCouture = 15;
this.tempsCouture = 5;
this.couleurs = new ArrayList<String>();
}
public void colorer(ArrayList<String> couleurs) {
for(int i=0; i<couleurs.size();i++){
this.couleurs.add(couleurs.get(i));
}
}
}
23
Présentation| Conception| Implémentation
Factory Method
Factory.java
public abstract class Factory {
public Vetement creerModele(TypeVetement type,String
modele,ArrayList<String> listCouleurs)
{
Vetement vet = this.coudreVetement(type, modele);
vet.consommeCoutTemps();
vet.colorer(listCouleurs);
return vet;
}
public abstract Vetement coudreVetement(TypeVetement type,String modele);
}
24
Présentation| Conception| Implémentation
Factory Method
FactoryWinter.java
public class FactoryWinter extends Factory{
public Vetement coudreVetement(TypeVetement type, String modele) {
Vetement vet = null;
switch(type)
{
case PANTALON:vet=new Pantalon(modele);break;
case MAILLOT:vet = new MaillotColMonte(modele);break;
}
return vet;
}
}
25
Présentation| Conception| Implémentation
Factory Method
FactorySummer.java
public class FactorySummer extends Factory{
public Vetement coudreVetement(TypeVetement type, String modele) {
Vetement vet = null;
switch(type)
{
case PANTALON:vet=new Short(modele);break;
case MAILLOT:vet = new MaillotDemiManche(modele);break;
}
return vet;
}
}
26
Présentation| Conception| Implémentation
Factory Method
MainMethod.java
public class MainMethod {
public static void main(String[] args) {
FactorySummer summer = new FactorySummer();
ArrayList<String> listCouleurs = new ArrayList<String>();
listCouleurs.add("rouge");
listCouleurs.add("blanc");
Vetement vetSummer = summer.creerModele(TypeVetement.PANTALON,
"short hawai", listCouleurs);
System.out.println(vetSummer);
}
}
La couture consomme:15DT et 5h
Modele: short hawai
Cout de couture:15
Temps de couture:5
Couleurs disponibles: rouge blanc
CONCLUSION
27
Conclusion
28
Le pattern Fabrique doit être utilisé pour découpler les clients des classes
concrètes à instancier, ou si l'on ne connaît pas d'avance toutes les classes
concrètes à instancier.
Pour créer des familles de produits cohérentes, on sera amené à utiliser le
design pattern Fabrique Abstraite qui répond spécifiquement à ce besoin.
MERCI POUR VOTRE ATTENTION
29

Weitere ähnliche Inhalte

Ähnlich wie Factory method

Cours c#
Cours c#Cours c#
Cours c#zan
 
Cours de C++, en français, 2002 - Cours 2.5
Cours de C++, en français, 2002 - Cours 2.5Cours de C++, en français, 2002 - Cours 2.5
Cours de C++, en français, 2002 - Cours 2.5Laurent BUNIET
 
softCours design pattern m youssfi partie 9 creation des objets abstract fact...
softCours design pattern m youssfi partie 9 creation des objets abstract fact...softCours design pattern m youssfi partie 9 creation des objets abstract fact...
softCours design pattern m youssfi partie 9 creation des objets abstract fact...ENSET, Université Hassan II Casablanca
 
Flutter : communication Android/iOS et les packages
Flutter : communication Android/iOS et les packagesFlutter : communication Android/iOS et les packages
Flutter : communication Android/iOS et les packagesEdouard Marquez
 
Chp6 - De UML vers C++
Chp6 - De UML vers C++Chp6 - De UML vers C++
Chp6 - De UML vers C++Lilia Sfaxi
 
Soutenance Zend Framework vs Symfony
Soutenance Zend Framework vs SymfonySoutenance Zend Framework vs Symfony
Soutenance Zend Framework vs SymfonyVincent Composieux
 
Design poo togo_jug_final
Design poo togo_jug_finalDesign poo togo_jug_final
Design poo togo_jug_finalDuchess France
 
Design poo togo_jug_final
Design poo togo_jug_finalDesign poo togo_jug_final
Design poo togo_jug_finalagnes_crepet
 
Java 9 modulo les modules devoxx fr 2017
Java 9 modulo les modules devoxx fr 2017Java 9 modulo les modules devoxx fr 2017
Java 9 modulo les modules devoxx fr 2017Jean-Michel Doudoux
 
Visual Studio 2008 Overview
Visual Studio 2008 OverviewVisual Studio 2008 Overview
Visual Studio 2008 OverviewGregory Renard
 
Les bonnes pratiques de l'architecture en général
Les bonnes pratiques de l'architecture en généralLes bonnes pratiques de l'architecture en général
Les bonnes pratiques de l'architecture en généralGeoffrey Bachelet
 
Presentationfinalrecruteapp.pptx
Presentationfinalrecruteapp.pptxPresentationfinalrecruteapp.pptx
Presentationfinalrecruteapp.pptxFaten98
 
Ma présentation PFE
Ma présentation PFEMa présentation PFE
Ma présentation PFELouati Aicha
 

Ähnlich wie Factory method (20)

Cours c#
Cours c#Cours c#
Cours c#
 
Cours de C++, en français, 2002 - Cours 2.5
Cours de C++, en français, 2002 - Cours 2.5Cours de C++, en français, 2002 - Cours 2.5
Cours de C++, en français, 2002 - Cours 2.5
 
generation_code.pdf
generation_code.pdfgeneration_code.pdf
generation_code.pdf
 
softCours design pattern m youssfi partie 9 creation des objets abstract fact...
softCours design pattern m youssfi partie 9 creation des objets abstract fact...softCours design pattern m youssfi partie 9 creation des objets abstract fact...
softCours design pattern m youssfi partie 9 creation des objets abstract fact...
 
C# 7 - Nouveautés
C# 7 - NouveautésC# 7 - Nouveautés
C# 7 - Nouveautés
 
POO-JAVA-partie-1.pdf
POO-JAVA-partie-1.pdfPOO-JAVA-partie-1.pdf
POO-JAVA-partie-1.pdf
 
Flutter : communication Android/iOS et les packages
Flutter : communication Android/iOS et les packagesFlutter : communication Android/iOS et les packages
Flutter : communication Android/iOS et les packages
 
Memo java
Memo javaMemo java
Memo java
 
Chp6 - De UML vers C++
Chp6 - De UML vers C++Chp6 - De UML vers C++
Chp6 - De UML vers C++
 
Soutenance Zend Framework vs Symfony
Soutenance Zend Framework vs SymfonySoutenance Zend Framework vs Symfony
Soutenance Zend Framework vs Symfony
 
Theme 6
Theme 6Theme 6
Theme 6
 
Design poo togo_jug_final
Design poo togo_jug_finalDesign poo togo_jug_final
Design poo togo_jug_final
 
Design poo togo_jug_final
Design poo togo_jug_finalDesign poo togo_jug_final
Design poo togo_jug_final
 
Design Patterns
Design PatternsDesign Patterns
Design Patterns
 
Java 9 modulo les modules devoxx fr 2017
Java 9 modulo les modules devoxx fr 2017Java 9 modulo les modules devoxx fr 2017
Java 9 modulo les modules devoxx fr 2017
 
Visual Studio 2008 Overview
Visual Studio 2008 OverviewVisual Studio 2008 Overview
Visual Studio 2008 Overview
 
Les bonnes pratiques de l'architecture en général
Les bonnes pratiques de l'architecture en généralLes bonnes pratiques de l'architecture en général
Les bonnes pratiques de l'architecture en général
 
Presentationfinalrecruteapp.pptx
Presentationfinalrecruteapp.pptxPresentationfinalrecruteapp.pptx
Presentationfinalrecruteapp.pptx
 
Ma présentation PFE
Ma présentation PFEMa présentation PFE
Ma présentation PFE
 
De legacy à symfony
De legacy à symfonyDe legacy à symfony
De legacy à symfony
 

Mehr von Hibatallah Aouadni

Mehr von Hibatallah Aouadni (7)

Réseaux mobiles
Réseaux mobiles Réseaux mobiles
Réseaux mobiles
 
Relation de dépendance immédiate
Relation de dépendance immédiateRelation de dépendance immédiate
Relation de dépendance immédiate
 
Patron observer
Patron observerPatron observer
Patron observer
 
KeyWatch
KeyWatchKeyWatch
KeyWatch
 
Exposé 1
Exposé   1Exposé   1
Exposé 1
 
BonitaSoft, la solution BPM
BonitaSoft, la solution BPMBonitaSoft, la solution BPM
BonitaSoft, la solution BPM
 
Mobile cloud computing
Mobile cloud computingMobile cloud computing
Mobile cloud computing
 

Factory method

  • 1. Le patron « Factory Method » Université de Sfax Faculté de science économique et gestion de Sfax Année universitaire 2015-2016 Présenté par: Mlle. Hibatallah AOUADNI Mlle. Khouloud KAMMOUN Mr. Melek ELLOUZE
  • 4. Introduction Factory Method est l’un des patrons de conception les plus utilisés Livré sous pattern créative et celui-ci fournit l’une des meilleurs façons pour créer un objet 4 Objet Interface Contexte | Problématique | Solution
  • 5. Introduction 5 Vêtement Maillot RobePantalon Robe robe = new Robe(); Ce code va générer des problèmes lors de l’ajout ou la suppression des produits Contexte | Problématique | Solution Exception
  • 6. Introduction 6 Vêtement Maillot RobePantalon Il est fort probable que l’instanciation des différents produit soit également réalisée dans d’autres classes Catalogue Boutique On se retrouve avec un code fortement couplé, qui risque d’être dupliqué à plusieurs endroits de l’application Contexte | Problématique | Solution
  • 7. Introduction 7 Vêtement Maillot RobePantalon Catalogue Boutique Contexte | Problématique | Solution SimpleFactory On évite la duplication de code Catalogue Boutique On facilite l'évolution au niveau de la gamme des produits.
  • 9. Simple Factory 9 Présentation| Conception| Implémentation La Fabrique Simple est chargée d'instancier et de retourner le Produit Concret attendu L'utilisateur du produit fait appel à la Fabrique Simple pour obtenir un Produit. L'utilisateur du produit est donc fortement couplé uniquement à la Fabrique Simple et non à tous les produits qu'il prend en charge.
  • 10. Simple Factory 10 String modele int coutCouture int tempsCouture ArrayList<String> couleurs consommeCoutTemps() Colorer() Vêtement MaillotColMontePantalon Présentation| Conception| Implémentation MainSimple coudreVetement() SimpleFactory
  • 11. public abstract class Vetement { protected String modele; protected int coutCouture; protected int tempsCouture; protected ArrayList<String> couleurs; public void consommeCoutTemps(){ System.out.println("la couture consomme:"+this.coutCouture+"DT et "+this.tempsCouture+"h"); } public abstract void colorer(ArrayList<String> couleurs); public String toString() { String str = "Modele: "+this.modele+"n"; str += "Cout de couture:"+this.coutCouture+"n"; str += "Temps de couture:"+this.tempsCouture+"n"; str += "Couleurs disponibles: "; for(int i=0; i<this.couleurs.size(); i++) { str += this.couleurs.get(i)+" "; } return str; } } 11 Présentation| Conception| Implémentation Simple Factory Vetement.java
  • 12. public class Pantalon extends Vetement{ public Pantalon(String modele) { this.modele = modele; this.coutCouture = 20; this.tempsCouture = 6; this.couleurs = new ArrayList<String>(); } public void colorer(ArrayList<String> couleurs) { for(int i=0; i<couleurs.size();i++){ this.couleurs.add(couleurs.get(i)); } } } 12 Présentation| Conception| Implémentation Simple Factory Pantalon.java
  • 13. public class MaillotColMonte extends Vetement{ public MaillotColMonte(String modele) { this.modele = modele; this.coutCouture = 30; this.tempsCouture = 10; this.couleurs = new ArrayList<String>(); } public void colorer(ArrayList<String> couleurs) { for(int i=0; i<couleurs.size();i++){ this.couleurs.add(couleurs.get(i)); } } } 13 Présentation| Conception| Implémentation Simple Factory MaillotColMonte.java
  • 14. public enum TypeVetement { PANTALON, MAILLOT, ROBE } 14 Présentation| Conception| Implémentation Simple Factory TypeUnite.java
  • 15. public class SimpleFactory { public Vetement coudreVetement(TypeVetement type,String modele){ Vetement vet = null; switch(type) { case PANTALON:vet=new Pantalon(modele);break; case MAILLOT:vet = new MaillotColMonte(modele);break; } return vet; } } 15 Présentation| Conception| Implémentation Simple Factory SimpleFactory.java
  • 16. public class Factory { private SimpleFactory simpleFactory; public Factory() { super(); this.simpleFactory = new SimpleFactory();} public Vetement creerModele(TypeVetement type,String modele,ArrayList<String> listCouleurs){ Vetement vet = this.simpleFactory.coudreVetement(type, modele); vet.consommeCoutTemps(); vet.colorer(listCouleurs); return vet;} } 16 Présentation| Conception| Implémentation Simple Factory Factory.java
  • 17. public class MainSimple { public static void main(String[] args) { Factory factory = new Factory(); ArrayList<String> listCouleurs = new ArrayList<String>(); listCouleurs.add("bleu"); listCouleurs.add("noir"); Vetement vet = factory.creerModele(TypeVetement.PANTALON, "pantalon jeans",listCouleurs); System.out.println(vet); } } 17 Présentation| Conception| Implémentation Simple Factory MainSimple.java la couture consomme:20DT et 6h Modele: pantalon jeans Cout de couture:20 Temps de couture:6 Couleurs disponibles: bleu noir
  • 19. Factory Method 19 Présentation| Conception| Implémentation L'entreprise évolue et a besoin de deux usines, chacune spécialisée dans la fabrication de certains produits. Fabrique Simple ne va plus suffire. Vêtement Pantalon MainMethod FactorySummer MaillotColMonte FactoryWinter
  • 20. Factory Method 20 MaillotColMonte Pantalon Présentation| Conception| Implémentation MainMethod String modele int coutCouture int tempsCouture ArrayList<String> couleurs consommeCoutTemps() Colorer() Vêtement Short MaillotDemiManche coudreVetement() FactorySummer coudreVetement() FactoryWinter creerModele(type,modele,listCouleurs) Factory
  • 21. 21 Présentation| Conception| Implémentation Factory Method Short.java public class Short extends Vetement{ public Short(String modele) { this.modele = modele; this.coutCouture = 15; this.tempsCouture = 5; this.couleurs = new ArrayList<String>(); } public void colorer(ArrayList<String> couleurs) { for(int i=0; i<couleurs.size();i++){ this.couleurs.add(couleurs.get(i)); } } }
  • 22. 22 Présentation| Conception| Implémentation Factory Method MaillotDemiManche.java public class MaillotDemiManche extends Vetement{ public MaillotDemiManche(String modele) { this.modele = modele; this.coutCouture = 15; this.tempsCouture = 5; this.couleurs = new ArrayList<String>(); } public void colorer(ArrayList<String> couleurs) { for(int i=0; i<couleurs.size();i++){ this.couleurs.add(couleurs.get(i)); } } }
  • 23. 23 Présentation| Conception| Implémentation Factory Method Factory.java public abstract class Factory { public Vetement creerModele(TypeVetement type,String modele,ArrayList<String> listCouleurs) { Vetement vet = this.coudreVetement(type, modele); vet.consommeCoutTemps(); vet.colorer(listCouleurs); return vet; } public abstract Vetement coudreVetement(TypeVetement type,String modele); }
  • 24. 24 Présentation| Conception| Implémentation Factory Method FactoryWinter.java public class FactoryWinter extends Factory{ public Vetement coudreVetement(TypeVetement type, String modele) { Vetement vet = null; switch(type) { case PANTALON:vet=new Pantalon(modele);break; case MAILLOT:vet = new MaillotColMonte(modele);break; } return vet; } }
  • 25. 25 Présentation| Conception| Implémentation Factory Method FactorySummer.java public class FactorySummer extends Factory{ public Vetement coudreVetement(TypeVetement type, String modele) { Vetement vet = null; switch(type) { case PANTALON:vet=new Short(modele);break; case MAILLOT:vet = new MaillotDemiManche(modele);break; } return vet; } }
  • 26. 26 Présentation| Conception| Implémentation Factory Method MainMethod.java public class MainMethod { public static void main(String[] args) { FactorySummer summer = new FactorySummer(); ArrayList<String> listCouleurs = new ArrayList<String>(); listCouleurs.add("rouge"); listCouleurs.add("blanc"); Vetement vetSummer = summer.creerModele(TypeVetement.PANTALON, "short hawai", listCouleurs); System.out.println(vetSummer); } } La couture consomme:15DT et 5h Modele: short hawai Cout de couture:15 Temps de couture:5 Couleurs disponibles: rouge blanc
  • 28. Conclusion 28 Le pattern Fabrique doit être utilisé pour découpler les clients des classes concrètes à instancier, ou si l'on ne connaît pas d'avance toutes les classes concrètes à instancier. Pour créer des familles de produits cohérentes, on sera amené à utiliser le design pattern Fabrique Abstraite qui répond spécifiquement à ce besoin.
  • 29. MERCI POUR VOTRE ATTENTION 29

Hinweis der Redaktion

  1. Bonjour, aujourd’hui, on va présenter notre exposé intitulé le patron Factory Method, présenter par mes collégues hiba et khouloud et moi-même
  2. Cet exposé sera organisé comme suit: Commençons par l’introduction, ou on va définit le contexte, la problématique et la solution, cette dernière nous guide à représenter la conception et l’implémentation du Factory Simple, ainsi de Factory Method. Et enfin, on récapitule tous dans la conclusion.
  3. Factory method est l'un des patrons de conception les plus utilisés en Java. ce type de pattern livré sous pattern créative et celui-ci fournit l'une des meilleures façons de créer un objet. En expliquant; Avec ce pattern, nous créons l'objet sans exposer la logique métier au client et se réfère à l'objet nouvellement créé à l'aide d'une interface commune
  4. Supposant que le client instancie une robe mais on a supprimé cette article alors le code client va générer une exception
  5. Par exemple, pour présenter un catalogue des produits fabriqués ou présenter les produits disponibles dans une boutique
  6. La première solution est de regrouper l'instanciation de tous les produits dans une seule classe chargée uniquement de ce rôle. Et les autres classes peuvent instancier des produits seulement via l’appel de SimpleFactory
  7. Cette solution appelée Fabrique Simple est une bonne pratique de conception mais pas un design pattern. Alors on l’explique dans cette partie
  8. Si par la suite l'entreprise évolue et a besoin de plusieurs usines, chacune spécialisée dans la fabrication de certains produits, Fabrique Simple ne va plus suffire. Dans ce cas il faut prévoir l'utilisation du design pattern Fabrique dont le diagramme UML est présenté ci-dessous.