Factory Design Patterns Factory Method

  • Published on
    14-Feb-2016

  • View
    57

  • 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. Porte: classes - PowerPoint PPT Presentation

Transcript

  • 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