View
58
Download
3
Embed Size (px)
DESCRIPTION
Factory Design Patterns Factory Method. Plan. Factory : principes The Factory Method pattern The Abstract Factory pattern “Design patterns are recurring solutions to design problems you see over and over.” [Smalltalk Companion]. Intention. Portée: classes - PowerPoint PPT Presentation
Factory Design Patterns
Factory Method
PlanFactory : principes
The Factory Method pattern
The Abstract Factory pattern
Design patterns are recurring solutions to design problems you see over and over. [Smalltalk Companion]
Intention Porte: classes
Dfinir une interface pour la cration dun objet, mais laisser les sous-classes dcider de la classe instancier
Une classe dlgue linstanciation ses sous-classes.
MotivationPROBLEME:Un framework possde des classes abstraites par rapport aux applicationsdes sous-classes spcifiques aux applications pour raliser diffrentes implmentations
SOLUTION:Le Factory Method pattern encapsule les connaissances sur quelles sous-classes il faut instancierdplace ces connaissances lextrieur du framework
Exemple I
Exemple IIEnterprise JavaBean (EJB) Application:Un 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.Les beans entits sont crs en instanciant un objet via une mthode factory (create).
Le mme principe sapplique pour les beans de session.
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 (); } }
StructureLes sous-classes redfinissent les mthodes abstraites de la classe abstraite pour rendre la sous-classe approprie
CollaborationLa classe Creator sappuie sur ses sous-classes pour dfinir une mthode factory qui rend une instance de la classe approprie ConcreteProduct
Quand lappliquer?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, mais 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 crs
Les 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 donne
Implmentations - Variations__ Une classe abstraite dfinit la mthode factory abstraite Alternative: une interface contient les signatures de crationLes sous-classes de la classe abstraite implmentent linterface
__ Une classe concrte possde une implmentation par dfaut de la mthode factory Les sous-classes redfinissent ou non la mthode factory
__La mthode factory possde un paramtre qui identifie la sorte dobjet crer
Factory Method: diagramme de classe I
Factory Method: diagramme de classe IIInvocation de la factory method createDocument() qui est responsable de la construction des objets
Bnfices et dsavantages ILes 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 lusager
Les clients peuvent devoir sous-classer la classe Creator uniquement pour crer un type particulier dobjet ConcreteProduct
Bnfices et dsavantages IIFournir des points darrimage (hook) pour les sous-classesLa cration dobjets lintrieur dune classe laide dune mthode factory est toujours plus flexible que la cration directe de lobjet.
Bnfices et dsavantages IIIConnexion de hirarchies parallles Les hirarchies parallles de classes surviennent lorsquune classe dlgue une partie de ses responsabilits une classe spare
Choix dimplmentation IDeux variantes principales
La 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 factory
Choix dimplmentation IILa mthode factory est paramtre.
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.
Tous les objets crs par la mthode factory partagent linterface Product.
Factory Method: exemple IIpublic 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(); } }
exemple II (suite)// ConcreteTablesCreator
String dbname = crs4.util.Configuration.getInstance().getProperty(default.database.name); TableCodeCreator codeCreator = this.getTableCodeCreator(dbname); //read from propertyfor (int i=0; i
Choix dimplmentation IIIConventions de noms (Naming conventions)
Bonne pratique dutiliser des conventions de noms qui identifient clairement les mthodes factory.
RfrencesE. Gamma, R. Helm, R. Johnson, J. Vlissides, Design Patterns, Addison-Wesley Professional Computing Series, 1998.
J.W. Cooper, Java Design Patterns A Tutorial, Addison-Wesley, 2000.
G.S. Raj, Factory Method creational pattern, http://gsraj.tripod.com/design/creational/factory/factory.html