DDeessiiggnn PPaatttteerrnnss 
PPaarrtt 99 
MMoohhaammeedd YYoouussssffii 
Laboratoire Signaux Systèmes Distribués et Inte...
Patterns de PPPPPPPaaaaaaatttttttttttttteeeeeeerrrrrrrnnnnnnnsssssss dddddddeeeeeee ccccccccrrrrrrrrééééééééaaaaaaaatttttt...
Fabrique abstraite ((AAbbssttrraacctt FFaaccttoorryy ) 
 Catégorie : 
◦ Création 
 OBJECTIFS : 
◦ Fournir une interface po...
DDiiaaggrraammmmee ddee ccllaasssseess 
med@youssfi.net
AAbbssttrraacctt FFaaccttoorryy 
 RESPONSABILITES : 
◦ AbstractFactory : définit l'interface des méthodes de 
création. 
◦...
IImmpplléémmeennttaattiioonn 
AbstractPlugin.java 
package dp; 
public interface AbstractPlugin { 
public void traitement(...
IImmpplléémmeennttaattiioonn 
PluginImplA.java 
package dp; 
public class PluginImplA implements AbstractPlugin { 
@Overri...
IImmpplléémmeennttaattiioonn 
FactoryImplA.java 
package dp; 
public class FactoryImplA implements AbstractFactory { 
@Ove...
IImmpplléémmeennttaattiioonn 
Application.java 
package dp; 
public class Application { 
public static void main(String[] ...
PPAATTTTEERRNN SSIINNGGLLEETTOONN 
med@youssfi.net
PPaatttteerrnn SSiinngglleettoonn 
 Le pattern Singleton permet de garantir la 
création d’une instance unique d’une class...
PPaatttteerrnn SSiinngglleettoonn 
 Catégorie : 
◦ Création 
 OBJECTIFS : 
◦ Restreindre le nombre d' instances d'une clas...
DDiiaaggrraammmmee ddee ccllaasssseess 
med@youssfi.net
Exemple dd’’iimmpplléémmeennttaattiioonn 
public class Singleton { 
private static final Singleton instance; 
private int ...
AApppplliiccaattiioonn 
public class Application { 
public static void main(String[] args) { 
for(int i=1;i=5;i++){ 
Singl...
Application multi tthhrreeaaddss eett llee 
ssiinngglleettoonn 
 Dans une application multi thread, le fait que 
plusieurs...
Exemple d’application mmuullttii tthhrreeaaddss 
public class ThreadedTask extends Thread { 
private String taskName; 
pub...
Exemple d’application mmuullttii tthhrreeaaddss 
public class ThreadedTask extends Thread { 
private String taskName; 
pub...
Exemple d’application mmuullttii tthhrreeaaddss 
public class AppMultiThread { 
public static void main(String[] args) { 
...
Solution ddee ssyynncchhrroonniissaattiioonn 
 public synchronized void traiter(String tache){ 
Instanciation 
-----------...
PPAATTTTEERRNN PPRROOTTOOTTYYPPEE 
med@youssfi.net
PPaatttteerrnn PPrroottoottyyppee 
 Catégorie : 
◦ Création 
 Objectifs : 
◦ L’objectif du pattern PROTOTYPE est de fourni...
PPrroottoottyyppee 
 Responsabilités : 
◦ Prototype : définit l'interface de duplication de 
soi-même. 
◦ PrototypeImplA e...
DDiiaaggrraammmmee ddee ccllaasssseess 
med@youssfi.net
EExxeemmppllee dd’’iimmpplléémmeennttaattiioonn 
med@youssfi.net
PPaatttteerrnn PPrroottoottyyppee 
Point.java 
package dp; 
public class Point { 
protected int x; protected int y; 
publi...
PPaatttteerrnn PPrroottoottyyppee 
Figure.java 
package dp; 
public abstract class Figure implements Cloneable { 
protecte...
PPaatttteerrnn PPrroottoottyyppee 
Cercle.java 
package dp; 
public class Cercle extends Figure { 
public Cercle(Point p1,...
PPaatttteerrnn PPrroottoottyyppee 
Rectangle.java 
package dp; 
public class Rectangle extends Figure { 
public Rectangle(...
PPaatttteerrnn PPrroottoottyyppee 
Application.java 
package dp; 
public class Application { 
public static void main(Stri...
Prochain SlideShare
Chargement dans…5
×

softCours design pattern m youssfi partie 9 creation des objets abstract factory singleton prototype

6 125 vues

Publié le

Design patterns : Création d'objets
- Abstract Factory
- Singleton
- Prototype

Publié dans : Logiciels
0 commentaire
4 j’aime
Statistiques
Remarques
  • Soyez le premier à commenter

Aucun téléchargement
Vues
Nombre de vues
6 125
Sur SlideShare
0
Issues des intégrations
0
Intégrations
38
Actions
Partages
0
Téléchargements
853
Commentaires
0
J’aime
4
Intégrations 0
Aucune incorporation

Aucune remarque pour cette diapositive

softCours design pattern m youssfi partie 9 creation des objets abstract factory singleton prototype

  1. 1. DDeessiiggnn PPaatttteerrnnss PPaarrtt 99 MMoohhaammeedd YYoouussssffii Laboratoire Signaux Systèmes Distribués et Intelligence Artificielle (SSDIA) ENSET, Université Hassan II Casablanca, Maroc Email : med@youssfi.net Supports de cours : http://fr.slideshare.net/mohamedyoussfi9 Chaîne vidéo : http://youtube.com/mohamedYoussfi Recherche : http://www.researchgate.net/profile/Youssfi_Mohamed/publications med@youssfi.net
  2. 2. Patterns de PPPPPPPaaaaaaatttttttttttttteeeeeeerrrrrrrnnnnnnnsssssss dddddddeeeeeee ccccccccrrrrrrrrééééééééaaaaaaaattttttttiiiiiiiioooooooonnnnnnnn dddddddd’’’’’’’’oooooooobbbbbbbbjjjjjjjjeeeeeeeettttttttssssssss :::::::: - AAbbssttrraaccttFFaaccttoorryy -- SSSSiiiinnnngggglllleeeettttoooonnnn - PPrroottoottyyppee Mohamed Youssfi med@youssfi.net med@youssfi.net
  3. 3. Fabrique abstraite ((AAbbssttrraacctt FFaaccttoorryy ) Catégorie : ◦ Création OBJECTIFS : ◦ Fournir une interface pour créer des objets d'une même famille sans préciser leurs classes concrètes. RREESSUULLTTAATT :: ◦ Le Design Pattern permet d'isoler l'appartenance à une famille de classes. med@youssfi.net
  4. 4. DDiiaaggrraammmmee ddee ccllaasssseess med@youssfi.net
  5. 5. AAbbssttrraacctt FFaaccttoorryy RESPONSABILITES : ◦ AbstractFactory : définit l'interface des méthodes de création. ◦ FactoryImplA et FactoryImplB : implémentent l'interface et instancient la classe concrète appropriée. ◦ AbstractPlugin : définit l'interface d'un type d'objet instancié. ◦ PPlluuggiinnAA eett PPlluuggiinnBB :: ssoonntt ddeess ssoouuss--ccllaasssseess ccoonnccrrèètteess.. EElllleess sont instanciées respectivement par par les FactoryImplA et FactoryImplB ◦ La partie cliente fait appel à une Fabrique pour obtenir une nouvelle instance d'AbstractPlugin. L'instanciation est transparente pour la partie cliente. Elle manipule une AbstractPlugin. med@youssfi.net
  6. 6. IImmpplléémmeennttaattiioonn AbstractPlugin.java package dp; public interface AbstractPlugin { public void traitement(); } AbstractFactory.java package dp; public interface AbstractFactory { public AbstractPlugin getInstence(); med@youssfi.net }
  7. 7. IImmpplléémmeennttaattiioonn PluginImplA.java package dp; public class PluginImplA implements AbstractPlugin { @Override public void traitement() { System.out.println(Traitement par le plugin A .....); } } package dp; public class PluginImplB implements AbstractPlugin { @Override public void traitement() { System.out.println(Traitement par le plugin B .....); } } med@youssfi.net PluginImplB.java
  8. 8. IImmpplléémmeennttaattiioonn FactoryImplA.java package dp; public class FactoryImplA implements AbstractFactory { @Override public AbstractPlugin getInstence() { return new PluginImplA(); } } package dp; public class FactoryImplB implements AbstractFactory { @Override public AbstractPlugin getInstence() { return new PluginImplB(); } } med@youssfi.net FactoryImplB.java
  9. 9. IImmpplléémmeennttaattiioonn Application.java package dp; public class Application { public static void main(String[] args) throws Exception{ // Instanciation statique de la fabrique AbstractFactory factory=new FactoryImplA(); AbstractPlugin plugin=factory.getInstence(); plugin.traitement(); // Instanciation dynamique de la fabrique factory =(AbstractFactory) Class.forName(dp.FactoryImplB).newInstance(); plugin=factory.getInstence(); plugin.traitement(); } } Traitement par le plugin A ..... Traitement par le plugin B .....
  10. 10. PPAATTTTEERRNN SSIINNGGLLEETTOONN med@youssfi.net
  11. 11. PPaatttteerrnn SSiinngglleettoonn Le pattern Singleton permet de garantir la création d’une instance unique d’une classe durant toute la durée d’exécution d’une application LLee ppaatttteerrnn SSiinngglleettoonn ffaaiitt ppaarrttiiee ddeess ppaatttteerrnnss Fabrique. Il très exploité dans les application qui s’exécutent dans un environnement multi-thread. med@youssfi.net
  12. 12. PPaatttteerrnn SSiinngglleettoonn Catégorie : ◦ Création OBJECTIFS : ◦ Restreindre le nombre d' instances d'une classe à une et une seule. ◦ Fournir une méthode pour accéder à cette instance unique. RAISONS DE L'UTILISER : ◦ La classe ne doit avoir qu'une seule instance. ◦ CCeellaa ppeeuutt êêttrree llee ccaass dd''uunnee rreessssoouurrccee ssyyssttèèmmee ppaarr eexxeemmppllee.. ◦ La classe empêche d'autres classes de l'instancier. Elle possède la seule instance d'elle-même et fournit la seule méthode permettant d'accéder à cette instance. RESULTAT : ◦ Le Design Pattern permet d'isoler l'unicité d'une instance. RESPONSABILITES : ◦ Singleton doit restreindre le nombre de ses propres instances à une et une seule. Son constructeur est privé : cela empêche les autres classes de l'instancier. La classe fournit la méthode statique getInstance() qui permet d'obtenir l'instance unique. med@youssfi.net
  13. 13. DDiiaaggrraammmmee ddee ccllaasssseess med@youssfi.net
  14. 14. Exemple dd’’iimmpplléémmeennttaattiioonn public class Singleton { private static final Singleton instance; private int compteur; static { instance=new Singleton(); } private Singleton() { System.out.println(Instanciation); } public static Singleton getInstance(){ return instance; } public void traiter(String tache){ System.out.println(---------- Tâche +tache+----------); for(int i=1;i=5;i++){ ++compteur; System.out.print(.+compteur); try { Thread.sleep(1000); } catch (InterruptedException e) { e.printStackTrace();} } System.out.println(); System.out.println(Compteur=+compteur); } } med@youssfi.net
  15. 15. AApppplliiccaattiioonn public class Application { public static void main(String[] args) { for(int i=1;i=5;i++){ Singleton singleton=Singleton.getInstance(); singleton.traiter(T+i); } }} IInnssttaanncciiaattiioonn ----------------Tâche T1------------ .1.2.3.4.5 Compteur=5 ----------------Tâche T2------------ .6.7.8.9.10 Compteur=10 ----------------Tâche T3------------ .11.12.13.14.15 Compteur=15 ----------------Tâche T4------------ .16.17.18.19.20 Compteur=20 ----------------Tâche T5------------ .21.22.23.24.25 Compteur=25 med@youssfi.net
  16. 16. Application multi tthhrreeaaddss eett llee ssiinngglleettoonn Dans une application multi thread, le fait que plusieurs threads utilisent un singleton, peut engendrer des problèmes de synchronisation. Pour éviter le problème, les méthodes du singleton peuvent être déclarée synchronized. Ceci entraine la création d’une file d’attente au niveau de l’accès à ces méthodes. Ce qui handicape les performances de l’application. med@youssfi.net
  17. 17. Exemple d’application mmuullttii tthhrreeaaddss public class ThreadedTask extends Thread { private String taskName; public ThreadedTask(String taskName) { this.taskName = taskName; } @@OOvveerrrriiddee public void run() { Singleton singleton=Singleton.getInstance(); singleton.traiter(taskName); } } med@youssfi.net
  18. 18. Exemple d’application mmuullttii tthhrreeaaddss public class ThreadedTask extends Thread { private String taskName; public ThreadedTask(String taskName) { this.taskName = taskName; } @@OOvveerrrriiddee public void run() { Singleton singleton=Singleton.getInstance(); singleton.traiter(taskName); } } med@youssfi.net
  19. 19. Exemple d’application mmuullttii tthhrreeaaddss public class AppMultiThread { public static void main(String[] args) { for(int i=1;i=5;i++){ ThreadedTask t=new ThreadedTask(T+i); t.start(); } } } Instanciation ---------------- Tâche T1------------ .1---------------- Tâche T3------------ ---------------- Tâche T5------------ .2.3---------------- Tâche T4------------ .4---------------- Tâche T2------------ .5.6.8.9.7.10.11.12.14.13.15.16.18.18.18.19.20.21.23.23.24 Compteur=24 Compteur=24 Compteur=24 Compteur=24 Compteur=24 ? med@youssfi.net
  20. 20. Solution ddee ssyynncchhrroonniissaattiioonn public synchronized void traiter(String tache){ Instanciation ----------------Tâche T1------------ .1.2.3.4.5 Compteur=5 --------------------------------TTââcchhee TT44------------------------ :ThradedTask .6.7.8.9.10 Compteur=10 ----------------Tâche T5------------ .11.12.13.14.15 Compteur=15 ----------------Tâche T3------------ .16.17.18.19.20 Compteur=20 ----------------Tâche T2------------ .21.22.23.24.25 Compteur=25 :Singleton :ThradedTask :ThradedTask :ThradedTask :ThradedTask med@youssfi.net
  21. 21. PPAATTTTEERRNN PPRROOTTOOTTYYPPEE med@youssfi.net
  22. 22. PPaatttteerrnn PPrroottoottyyppee Catégorie : ◦ Création Objectifs : ◦ L’objectif du pattern PROTOTYPE est de fournir de nouveaux objets par la copie d’un exemple plutôt que de produire de nouvelles instances non initialisées d’une classe. RRaaiissoonnss dd’’uuttiilliissaattiioonn ◦ Le système doit créer de nouvelles instances, mais il ignore de quelle classe. Il dispose cependant d'instances de la classe désirée. ◦ La duplication peut être également intéressante pour les performances (la duplication est plus rapide que l'instanciation). Résultat : ◦ Le Design Pattern permet d'isoler l'appartenance à une classe. med@youssfi.net
  23. 23. PPrroottoottyyppee Responsabilités : ◦ Prototype : définit l'interface de duplication de soi-même. ◦ PrototypeImplA et PrototypeImplA : sont ddeess ssoouuss--ccllaasssseess ccoonnccrrèètteess ddee PPrroottoottyyppee.. EElllleess implémentent l'interface de duplication. ◦ La partie cliente appelle la méthode clone() de la classe Prototype. Cette méthode retourne un double de l'instance. med@youssfi.net
  24. 24. DDiiaaggrraammmmee ddee ccllaasssseess med@youssfi.net
  25. 25. EExxeemmppllee dd’’iimmpplléémmeennttaattiioonn med@youssfi.net
  26. 26. PPaatttteerrnn PPrroottoottyyppee Point.java package dp; public class Point { protected int x; protected int y; public Point(int x, int y) { this.x = x; this.y = y; } public double distance(Point p){ int a=p.x-this.x; int b=p.y-this.y; return Math.sqrt(a*a+b*b); } @Override public String toString() { return Point [x= + x + , y= + y + ]; } } med@youssfi.net
  27. 27. PPaatttteerrnn PPrroottoottyyppee Figure.java package dp; public abstract class Figure implements Cloneable { protected Point p1; protected Point p2; public Figure(Point p1, Point p2) { this.p1 = p1; this.p2 = p2; } @Override protected Figure clone() throws CloneNotSupportedException { return (Figure)super.clone(); } public abstract double getSurface(); @Override public String toString() { return p1= + p1 + , p2= + p2; } } med@youssfi.net
  28. 28. PPaatttteerrnn PPrroottoottyyppee Cercle.java package dp; public class Cercle extends Figure { public Cercle(Point p1, Point p2) { super(p1, p2); } @Override public double getSurface() { double r=p1.distance(p2); return Math.PI*r*r; } @Override public String toString() { return Cercle [ + super.toString() + ]; } } med@youssfi.net
  29. 29. PPaatttteerrnn PPrroottoottyyppee Rectangle.java package dp; public class Rectangle extends Figure { public Rectangle(Point p1, Point p2) { super(p1, p2); } @Override public double getSurface() { int l=p1.x-p2.x; int h=p1.y-p2.y; return l*h; } @Override public String toString() { return Rectangle [ + super.toString() + ]; } } med@youssfi.net
  30. 30. PPaatttteerrnn PPrroottoottyyppee Application.java package dp; public class Application { public static void main(String[] args) throws CloneNotSupportedException { Figure f1=new Cercle(new Point(10, 10), new Point(20, 20)); Figure f2=new Rectangle(new Point(30, 30), new Point(40, 40)); System.out.println(Surface de +f1+ est :+f1.getSurface()); System.out.println(Surface de +f2+ est :+f2.getSurface()); System.out.println(----------------------------------------); Figure f3=f1.clone(); System.out.println(Copie de f1 :); System.out.println(Surface de +f3+ est :+f3.getSurface()); System.out.println(----------------------------------------); Figure f4=f2.clone(); System.out.println(Copie de f2 :); System.out.println(Surface de +f4+ est :+f4.getSurface()); }} Surface de Cercle [p1=Point [x=10, y=10], p2=Point [x=20, y=20]] est :628.3185307179587 Surface de Rectangle [p1=Point [x=30, y=30], p2=Point [x=40, y=40]] est :100.0 ---------------------------------------- Copie de f1 : Surface de Cercle [p1=Point [x=10, y=10], p2=Point [x=20, y=20]] est :628.3185307179587 ---------------------------------------- Copie de f2 : Surface de Rectangle [p1=Point [x=30, y=30], p2=Point [x=40, y=40]] est :100.0 med@youssfi.net

×