Factory Design Patterns Factory Method. Factory Method Design Pattern Plan Factory : principesFactory : principes The Factory Method patternThe Factory

Embed Size (px)

Text of Factory Design Patterns Factory Method. Factory Method Design Pattern Plan Factory :...

  • Page 1
  • Factory Design Patterns Factory Method
  • Page 2
  • Factory Method Design Pattern Plan Factory : principesFactory : principes The Factory Method patternThe Factory Method pattern The Abstract Factory patternThe Abstract Factory pattern Design patterns are recurring solutions to design problems you see over and over. [Smalltalk Companion]
  • Page 3
  • Factory Method Design Pattern Intention Porte: classes Porte: classes Dfinir une interface pour la cration dun objet, mais laisser les sous-classes dcider de la classe instancierDfinir une interface pour la cration dun objet, mais laisser les sous-classes dcider de la classe instancier Une classe dlgue linstanciation ses sous- classes.Une classe dlgue linstanciation ses sous- classes.
  • Page 4
  • Factory Method Design Pattern Motivation PROBLEME:PROBLEME: Un framework possdeUn framework possde des classes abstraites par rapport aux applicationsdes classes abstraites par rapport aux applications des sous-classes spcifiques aux applications pour raliser diffrentes implmentationsdes sous-classes spcifiques aux applications pour raliser diffrentes implmentations SOLUTION:SOLUTION: Le Factory Method patternLe Factory Method pattern encapsule les connaissancesencapsule les connaissances sur quelles sous-classes il faut instancier dplace ces connaissances lextrieur du frameworkdplace ces connaissances lextrieur du framework
  • Page 5
  • Factory Method Design Pattern Exemple I
  • Page 6
  • Factory Method Design Pattern Exemple II Enterprise JavaBean (EJB) Application:Enterprise JavaBean (EJB) Application: Un bean entit est une reprsentation objet de donnes persistentesUn bean entit est une reprsentation objet de donnes persistentes ces donnes sont places sur un support persistent, e.g. une base de donnes. Une cl primaire identifie chaque instance dun bean entit.Une cl primaire identifie chaque instance dun bean entit. Les beans entits sont crs en instanciant un objet via une mthode factory ( create).Les beans entits sont crs en instanciant un objet via une mthode factory ( create). Le mme principe sapplique pour les beans de session.Le mme principe sapplique pour les beans de session.
  • Page 7
  • Factory Method Design Pattern Exemple II (suite) import javax.naming.*; public class EJBClient { public static void main (String[] argv) { // get the JNDI naming context Context initialCtx = new InitialContext (); // use the context to lookup the EJB Home interface AccountHome home=(AccountHome)initialCtx.lookup("Account"); // use the Home Interface to create a Session bean object Account account = home.create (10001, "Athul", 100000000.25d); // invoke business methods account.credit (200000000.25d); // remove the object account.remove (); }}
  • Page 8
  • Factory Method Design Pattern Structure Les sous-classes redfinissent les mthodes abstraites de la classe abstraite pour rendre la sous-classe approprieLes sous-classes redfinissent les mthodes abstraites de la classe abstraite pour rendre la sous-classe approprie
  • Page 9
  • Factory Method Design Pattern Collaboration La classe Creator sappuie sur ses sous- classes pour dfinir une mthode factory qui rend une instance de la classe approprie ConcreteProductLa classe Creator sappuie sur ses sous- classes pour dfinir une mthode factory qui rend une instance de la classe approprie ConcreteProduct
  • Page 10
  • Factory Method Design Pattern Quand lappliquer? Lorsque la classe qui doit instancier des classes ne connat que les classes abstraites.Lorsque la classe qui doit instancier des classes ne connat que les classes abstraites. La classe ne connat que le moment de la cration dun objet,La classe ne connat que le moment de la cration dun objet, mais ne connat pas quelle sorte dobjets, elle doit crermais ne connat pas quelle sorte dobjets, elle doit crer parce que cet objet dpend de lapplication Une classe veut que ses sous-classes spcifient quels objets seront crsUne classe veut que ses sous-classes spcifient quels objets seront crs Les classes dlguent la responsabilit une ou plusieurs sous-classes daideLes classes dlguent la responsabilit une ou plusieurs sous-classes daide on dsire rendre locales les connaissances qui vont aider dterminer quel sera la classe daide dans une situation donneon dsire rendre locales les connaissances qui vont aider dterminer quel sera la classe daide dans une situation donne
  • Page 11
  • Factory Method Design Pattern Implmentations - Variations 1.__ Une classe abstraite dfinit la mthode factory abstraiteUne classe abstraite dfinit la mthode factory abstraite Alternative: une interface contient les signatures de crationAlternative: une interface contient les signatures de cration Les sous-classes de la classe abstraite implmentent linterfaceLes sous-classes de la classe abstraite implmentent linterface 2.__ Une classe concrte possde une implmentation par dfaut de la mthode factoryUne classe concrte possde une implmentation par dfaut de la mthode factory Les sous-classes redfinissent ou non la mthode factoryLes sous-classes redfinissent ou non la mthode factory 3. __ La mthode factory possde un paramtre qui identifie la sorte dobjet crerLa mthode factory possde un paramtre qui identifie la sorte dobjet crer
  • Page 12
  • Factory Method Design Pattern Factory Method: diagramme de classe I factory method
  • Page 13
  • Factory Method Design Pattern Factory Method: diagramme de classe II Invocation de la factory method createDocument() qui est responsable de la construction des objetsInvocation de la factory method createDocument() qui est responsable de la construction des objets factory method
  • Page 14
  • Factory Method Design Pattern Bnfices et dsavantages I Les mthodes factory liminent le besoin de lier des classes spcifiques une application dans le codeLes mthodes factory liminent le besoin de lier des classes spcifiques une application dans le code Le code nintervient quavec linterface du produit et peut ainsi travailler avec nimporte quelle classe concrte dfinie par lusagerLe code nintervient quavec linterface du produit et peut ainsi travailler avec nimporte quelle classe concrte dfinie par lusager Les clients peuvent devoir sous-classer la classe Creator uniquement pour crer un type particulier dobjet ConcreteProductLes clients peuvent devoir sous-classer la classe Creator uniquement pour crer un type particulier dobjet ConcreteProduct
  • Page 15
  • Factory Method Design Pattern Bnfices et dsavantages II Fournir des points darrimage (hook) pour les sous-classesFournir des points darrimage (hook) pour les sous-classes La cration dobjets lintrieur dune classe laide dune mthode factory est toujours plus flexible que la cration directe de lobjet.La cration dobjets lintrieur dune classe laide dune mthode factory est toujours plus flexible que la cration directe de lobjet.
  • Page 16
  • Factory Method Design Pattern Bnfices et dsavantages III Connexion de hirarchies paralllesConnexion de hirarchies parallles Les hirarchies parallles de classes surviennent lorsquune classe dlgue une partie de ses responsabilits une classe spareLes hirarchies parallles de classes surviennent lorsquune classe dlgue une partie de ses responsabilits une classe spare
  • Page 17
  • Factory Method Design Pattern Choix dimplmentation I Deux variantes principalesDeux variantes principales La classe Creator est une classe abstraite et ne fournit pas dimplmentation par dfaut de la mthode factoryLa classe Creator est une classe abstraite et ne fournit pas dimplmentation par dfaut de la mthode factory La classe Creator est une classe concrte et fournit une implmentation par dfaut de la mthode factoryLa classe Creator est une classe concrte et fournit une implmentation par dfaut de la mthode factory
  • Page 18
  • Factory Method Design Pattern Choix dimplmentation II La mthode factory est paramtre.La mthode factory est paramtre. Une variation sur ce patron permet la mthode factory de crer plusieurs sortes de produits.Une variation sur ce patron permet la mthode factory de crer plusieurs sortes de produits. La mthode factory possde un paramtre qui identifie la sorte dobjet crer.La mthode factory possde un paramtre qui identifie la sorte dobjet crer. Tous les objets crs par la mthode factory partagent linterface Product.Tous les objets crs par la mthode factory partagent linterface Product.
  • Page 19
  • Factory Method Design Pattern Factory Method: exemple II public abstract class TablesCreator { public abstract TableCodeCreator getTableCodeCreator(String dbName) ; } public interface TableCodeCreator { void createSource(); } public class DB2TableCodeCreator implements TableCodeCreator { public void createSource(padis.util.ClassInfoDescriptor descriptor, String workingDir) { // CREATES JAVA SOURCE CODE FOR tableName.java FILES} } public class ConcreteTablesCreator extends TablesCreator { public TableCodeCreator getTableCodeCreator(String dbName) { if (dbName.equals (DB2)) return new DB2TableCodeCreator(); else if (dbName.equals (ORACLE)) return new ORACLETableCodeCreator(); } } Classe abstraite interface Classe concrte Classe concrte
  • Page 20
  • Factory Method Design Pattern exemple II (suite) // ConcreteTablesCreator String dbname = crs4.util.Configuration.getInstance().getProperty(default.database.name); TableCodeCreator codeCreator = this.getTableCodeCreator(dbname); //read from property for (int i=0; i