SlideShare une entreprise Scribd logo
1  sur  30
Télécharger pour lire hors ligne
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
Patterns de PPPPPPPaaaaaaatttttttttttttteeeeeeerrrrrrrnnnnnnnsssssss dddddddeeeeeee ccccccccrrrrrrrrééééééééaaaaaaaattttttttiiiiiiiioooooooonnnnnnnn dddddddd’’’’’’’’oooooooobbbbbbbbjjjjjjjjeeeeeeeettttttttssssssss :::::::: 
- AAbbssttrraaccttFFaaccttoorryy 
-- SSSSiiiinnnngggglllleeeettttoooonnnn 
- PPrroottoottyyppee 
Mohamed Youssfi 
med@youssfi.net 
med@youssfi.net
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
DDiiaaggrraammmmee ddee ccllaasssseess 
med@youssfi.net
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
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 
}
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
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
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 .....
PPAATTTTEERRNN SSIINNGGLLEETTOONN 
med@youssfi.net
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
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
DDiiaaggrraammmmee ddee ccllaasssseess 
med@youssfi.net
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
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
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
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
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
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
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
PPAATTTTEERRNN PPRROOTTOOTTYYPPEE 
med@youssfi.net
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
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
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; 
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
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
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
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
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

Contenu connexe

Tendances

Architecture jee principe de inversion de controle et injection des dependances
Architecture jee principe de inversion de controle et injection des dependancesArchitecture jee principe de inversion de controle et injection des dependances
Architecture jee principe de inversion de controle et injection des dependancesENSET, Université Hassan II Casablanca
 
Java entreprise edition et industrialisation du génie logiciel par m.youssfi
Java entreprise edition et industrialisation du génie logiciel par m.youssfiJava entreprise edition et industrialisation du génie logiciel par m.youssfi
Java entreprise edition et industrialisation du génie logiciel par m.youssfiENSET, Université Hassan II Casablanca
 
Mohamed youssfi support architectures logicielles distribuées basées sue les ...
Mohamed youssfi support architectures logicielles distribuées basées sue les ...Mohamed youssfi support architectures logicielles distribuées basées sue les ...
Mohamed youssfi support architectures logicielles distribuées basées sue les ...ENSET, Université Hassan II Casablanca
 
Design Pattern introduction
Design Pattern introductionDesign Pattern introduction
Design Pattern introductionneuros
 
Développement d'un site web jee de e commerce basé sur spring (m.youssfi)
Développement d'un site web jee de e commerce basé sur spring (m.youssfi)Développement d'un site web jee de e commerce basé sur spring (m.youssfi)
Développement d'un site web jee de e commerce basé sur spring (m.youssfi)ENSET, Université Hassan II Casablanca
 
Support de cours EJB 3 version complète Par Mr Youssfi, ENSET, Université Ha...
Support de cours EJB 3 version complète Par Mr  Youssfi, ENSET, Université Ha...Support de cours EJB 3 version complète Par Mr  Youssfi, ENSET, Université Ha...
Support de cours EJB 3 version complète Par Mr Youssfi, ENSET, Université Ha...ENSET, Université Hassan II Casablanca
 

Tendances (20)

Cours design pattern m youssfi partie 4 composite
Cours design pattern m youssfi partie 4 compositeCours design pattern m youssfi partie 4 composite
Cours design pattern m youssfi partie 4 composite
 
Cours design pattern m youssfi partie 7 facade bridge flyweight
Cours design pattern m youssfi partie 7 facade bridge flyweightCours design pattern m youssfi partie 7 facade bridge flyweight
Cours design pattern m youssfi partie 7 facade bridge flyweight
 
Support POO Java Deuxième Partie
Support POO Java Deuxième PartieSupport POO Java Deuxième Partie
Support POO Java Deuxième Partie
 
Architecture jee principe de inversion de controle et injection des dependances
Architecture jee principe de inversion de controle et injection des dependancesArchitecture jee principe de inversion de controle et injection des dependances
Architecture jee principe de inversion de controle et injection des dependances
 
Java entreprise edition et industrialisation du génie logiciel par m.youssfi
Java entreprise edition et industrialisation du génie logiciel par m.youssfiJava entreprise edition et industrialisation du génie logiciel par m.youssfi
Java entreprise edition et industrialisation du génie logiciel par m.youssfi
 
Support programmation orientée aspect mohamed youssfi (aop)
Support programmation orientée aspect mohamed youssfi (aop)Support programmation orientée aspect mohamed youssfi (aop)
Support programmation orientée aspect mohamed youssfi (aop)
 
Support Java Avancé Troisième Partie
Support Java Avancé Troisième PartieSupport Java Avancé Troisième Partie
Support Java Avancé Troisième Partie
 
Support de cours Spring M.youssfi
Support de cours Spring  M.youssfiSupport de cours Spring  M.youssfi
Support de cours Spring M.youssfi
 
Mohamed youssfi support architectures logicielles distribuées basées sue les ...
Mohamed youssfi support architectures logicielles distribuées basées sue les ...Mohamed youssfi support architectures logicielles distribuées basées sue les ...
Mohamed youssfi support architectures logicielles distribuées basées sue les ...
 
Support JEE Servlet Jsp MVC M.Youssfi
Support JEE Servlet Jsp MVC M.YoussfiSupport JEE Servlet Jsp MVC M.Youssfi
Support JEE Servlet Jsp MVC M.Youssfi
 
Site JEE de ECommerce Basé sur Spring IOC MVC Security JPA Hibernate
Site JEE de ECommerce  Basé sur Spring IOC MVC Security JPA HibernateSite JEE de ECommerce  Basé sur Spring IOC MVC Security JPA Hibernate
Site JEE de ECommerce Basé sur Spring IOC MVC Security JPA Hibernate
 
Design Pattern introduction
Design Pattern introductionDesign Pattern introduction
Design Pattern introduction
 
Support de cours technologie et application m.youssfi
Support de cours technologie et application m.youssfiSupport de cours technologie et application m.youssfi
Support de cours technologie et application m.youssfi
 
Développement d'un site web jee de e commerce basé sur spring (m.youssfi)
Développement d'un site web jee de e commerce basé sur spring (m.youssfi)Développement d'un site web jee de e commerce basé sur spring (m.youssfi)
Développement d'un site web jee de e commerce basé sur spring (m.youssfi)
 
Support de cours entrepise java beans ejb m.youssfi
Support de cours entrepise java beans ejb m.youssfiSupport de cours entrepise java beans ejb m.youssfi
Support de cours entrepise java beans ejb m.youssfi
 
Support POO Java première partie
Support POO Java première partieSupport POO Java première partie
Support POO Java première partie
 
Support NodeJS avec TypeScript Express MongoDB
Support NodeJS avec TypeScript Express MongoDBSupport NodeJS avec TypeScript Express MongoDB
Support NodeJS avec TypeScript Express MongoDB
 
Support programmation orientée objet c# .net version f8
Support programmation orientée objet c#  .net version f8Support programmation orientée objet c#  .net version f8
Support programmation orientée objet c# .net version f8
 
Sécurité des Applications Web avec Json Web Token (JWT)
Sécurité des Applications Web avec Json Web Token (JWT)Sécurité des Applications Web avec Json Web Token (JWT)
Sécurité des Applications Web avec Json Web Token (JWT)
 
Support de cours EJB 3 version complète Par Mr Youssfi, ENSET, Université Ha...
Support de cours EJB 3 version complète Par Mr  Youssfi, ENSET, Université Ha...Support de cours EJB 3 version complète Par Mr  Youssfi, ENSET, Université Ha...
Support de cours EJB 3 version complète Par Mr Youssfi, ENSET, Université Ha...
 

En vedette

Systèmes multi agents concepts et mise en oeuvre avec le middleware jade
Systèmes multi agents concepts et mise en oeuvre avec le middleware jadeSystèmes multi agents concepts et mise en oeuvre avec le middleware jade
Systèmes multi agents concepts et mise en oeuvre avec le middleware jadeENSET, Université Hassan II Casablanca
 
Intelligence artificielle et système multi-agent
Intelligence artificielle et système multi-agentIntelligence artificielle et système multi-agent
Intelligence artificielle et système multi-agentNoureddine Djebbari
 
Architecture des Systèmes Multi-Agents
Architecture des Systèmes Multi-Agents Architecture des Systèmes Multi-Agents
Architecture des Systèmes Multi-Agents Rached Krim
 

En vedette (6)

Systèmes multi agents concepts et mise en oeuvre avec le middleware jade
Systèmes multi agents concepts et mise en oeuvre avec le middleware jadeSystèmes multi agents concepts et mise en oeuvre avec le middleware jade
Systèmes multi agents concepts et mise en oeuvre avec le middleware jade
 
Support de Cours JSF2 Première partie Intégration avec Spring
Support de Cours JSF2 Première partie Intégration avec SpringSupport de Cours JSF2 Première partie Intégration avec Spring
Support de Cours JSF2 Première partie Intégration avec Spring
 
Développement d'un site web de E-Commerce avec PHP (Première Partie)
Développement d'un site web de E-Commerce avec PHP (Première Partie)Développement d'un site web de E-Commerce avec PHP (Première Partie)
Développement d'un site web de E-Commerce avec PHP (Première Partie)
 
Intelligence artificielle et système multi-agent
Intelligence artificielle et système multi-agentIntelligence artificielle et système multi-agent
Intelligence artificielle et système multi-agent
 
Resume
ResumeResume
Resume
 
Architecture des Systèmes Multi-Agents
Architecture des Systèmes Multi-Agents Architecture des Systèmes Multi-Agents
Architecture des Systèmes Multi-Agents
 

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

Patrons de creation
Patrons de creationPatrons de creation
Patrons de creationomri med
 
Tp1 design patternappliques
Tp1 design patternappliquesTp1 design patternappliques
Tp1 design patternappliquesMariem ZAOUALI
 
4 asynch task_services_thread
4 asynch task_services_thread4 asynch task_services_thread
4 asynch task_services_threadSaber LAJILI
 
Traits : de la théorie à la pratique
Traits : de la théorie à la pratiqueTraits : de la théorie à la pratique
Traits : de la théorie à la pratiqueFrederic Hardy
 
Applications Android - cours 12 : Persistance de données SQLite
Applications Android - cours 12 : Persistance de données SQLiteApplications Android - cours 12 : Persistance de données SQLite
Applications Android - cours 12 : Persistance de données SQLiteAhmed-Chawki Chaouche
 
JAVA-UIK-CHAP6-POO HERITAGE JAVA
JAVA-UIK-CHAP6-POO HERITAGE JAVAJAVA-UIK-CHAP6-POO HERITAGE JAVA
JAVA-UIK-CHAP6-POO HERITAGE JAVAAymen Bedwivski
 
Java uik-chap6-poo heritage v2 java
Java uik-chap6-poo heritage v2 javaJava uik-chap6-poo heritage v2 java
Java uik-chap6-poo heritage v2 javaAmel Morchdi
 
Tester unitairement une application java
Tester unitairement une application javaTester unitairement une application java
Tester unitairement une application javaAntoine Rey
 
Correction examen-java-avancé-1
Correction examen-java-avancé-1Correction examen-java-avancé-1
Correction examen-java-avancé-1vangogue
 
Cours de C++, en français, 2002 - Cours 2.2
Cours de C++, en français, 2002 - Cours 2.2Cours de C++, en français, 2002 - Cours 2.2
Cours de C++, en français, 2002 - Cours 2.2Laurent BUNIET
 
System c eniso_jan_fev_07
System c eniso_jan_fev_07System c eniso_jan_fev_07
System c eniso_jan_fev_07haythem_2015
 
Design Patterns Java
Design Patterns JavaDesign Patterns Java
Design Patterns JavaVINOT Bernard
 
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
 

Similaire à softCours design pattern m youssfi partie 9 creation des objets abstract factory singleton prototype (20)

Multithreading
MultithreadingMultithreading
Multithreading
 
Design patterns
Design patternsDesign patterns
Design patterns
 
Patrons de creation
Patrons de creationPatrons de creation
Patrons de creation
 
Tp1 design patternappliques
Tp1 design patternappliquesTp1 design patternappliques
Tp1 design patternappliques
 
POO-JAVA-partie-1.pdf
POO-JAVA-partie-1.pdfPOO-JAVA-partie-1.pdf
POO-JAVA-partie-1.pdf
 
4 asynch task_services_thread
4 asynch task_services_thread4 asynch task_services_thread
4 asynch task_services_thread
 
Design Patterns
Design PatternsDesign Patterns
Design Patterns
 
Traits : de la théorie à la pratique
Traits : de la théorie à la pratiqueTraits : de la théorie à la pratique
Traits : de la théorie à la pratique
 
Threads
ThreadsThreads
Threads
 
Applications Android - cours 12 : Persistance de données SQLite
Applications Android - cours 12 : Persistance de données SQLiteApplications Android - cours 12 : Persistance de données SQLite
Applications Android - cours 12 : Persistance de données SQLite
 
Le framework-executor
Le framework-executorLe framework-executor
Le framework-executor
 
JAVA-UIK-CHAP6-POO HERITAGE JAVA
JAVA-UIK-CHAP6-POO HERITAGE JAVAJAVA-UIK-CHAP6-POO HERITAGE JAVA
JAVA-UIK-CHAP6-POO HERITAGE JAVA
 
Java uik-chap6-poo heritage v2 java
Java uik-chap6-poo heritage v2 javaJava uik-chap6-poo heritage v2 java
Java uik-chap6-poo heritage v2 java
 
Tester unitairement une application java
Tester unitairement une application javaTester unitairement une application java
Tester unitairement une application java
 
SQL_Python.pdf
SQL_Python.pdfSQL_Python.pdf
SQL_Python.pdf
 
Correction examen-java-avancé-1
Correction examen-java-avancé-1Correction examen-java-avancé-1
Correction examen-java-avancé-1
 
Cours de C++, en français, 2002 - Cours 2.2
Cours de C++, en français, 2002 - Cours 2.2Cours de C++, en français, 2002 - Cours 2.2
Cours de C++, en français, 2002 - Cours 2.2
 
System c eniso_jan_fev_07
System c eniso_jan_fev_07System c eniso_jan_fev_07
System c eniso_jan_fev_07
 
Design Patterns Java
Design Patterns JavaDesign Patterns Java
Design Patterns Java
 
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
 

Plus de ENSET, Université Hassan II Casablanca

Plus de ENSET, Université Hassan II Casablanca (8)

Theses Soutenues sous Direction et Co-Direction du Pr YOUSSFI
Theses Soutenues sous Direction et Co-Direction du Pr YOUSSFITheses Soutenues sous Direction et Co-Direction du Pr YOUSSFI
Theses Soutenues sous Direction et Co-Direction du Pr YOUSSFI
 
Traitement distribue en BIg Data - KAFKA Broker and Kafka Streams
Traitement distribue en BIg Data - KAFKA Broker and Kafka StreamsTraitement distribue en BIg Data - KAFKA Broker and Kafka Streams
Traitement distribue en BIg Data - KAFKA Broker and Kafka Streams
 
Mise en oeuvre des Frameworks de Machines et Deep Learning pour les Applicati...
Mise en oeuvre des Frameworks de Machines et Deep Learning pour les Applicati...Mise en oeuvre des Frameworks de Machines et Deep Learning pour les Applicati...
Mise en oeuvre des Frameworks de Machines et Deep Learning pour les Applicati...
 
Support distributed computing and caching avec hazelcast
Support distributed computing and caching avec hazelcastSupport distributed computing and caching avec hazelcast
Support distributed computing and caching avec hazelcast
 
Mise en oeuvre des framework de machines et deep learning v1
Mise en oeuvre des framework de machines et deep learning v1 Mise en oeuvre des framework de machines et deep learning v1
Mise en oeuvre des framework de machines et deep learning v1
 
Conférence: Catalyseurs de l'Intelligence Artificielle et Écosystème des Fram...
Conférence: Catalyseurs de l'Intelligence Artificielle et Écosystème des Fram...Conférence: Catalyseurs de l'Intelligence Artificielle et Écosystème des Fram...
Conférence: Catalyseurs de l'Intelligence Artificielle et Écosystème des Fram...
 
Support developpement applications mobiles avec ionic v3 et v4
Support developpement applications mobiles avec ionic v3 et v4Support developpement applications mobiles avec ionic v3 et v4
Support developpement applications mobiles avec ionic v3 et v4
 
Support de cours angular
Support de cours angularSupport de cours angular
Support de cours angular
 

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

  • 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. Patterns de PPPPPPPaaaaaaatttttttttttttteeeeeeerrrrrrrnnnnnnnsssssss dddddddeeeeeee ccccccccrrrrrrrrééééééééaaaaaaaattttttttiiiiiiiioooooooonnnnnnnn dddddddd’’’’’’’’oooooooobbbbbbbbjjjjjjjjeeeeeeeettttttttssssssss :::::::: - AAbbssttrraaccttFFaaccttoorryy -- SSSSiiiinnnngggglllleeeettttoooonnnn - PPrroottoottyyppee Mohamed Youssfi med@youssfi.net med@youssfi.net
  • 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
  • 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. 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. 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. 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. 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 .....
  • 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. 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
  • 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. 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. 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. 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. 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. 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. 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
  • 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. 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
  • 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. 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. 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. 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. 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