130 likes | 297 Views
Factory Design Patterns. Contents. Factory patterns: principes The Factory Method pattern The Abstract Factory pattern “Design patterns are recurring solutions to design problems you see over and over.” [Smalltalk Companion]. But et portée (1). But : que fait un patron ?
E N D
Contents • Factory patterns: principes • The Factory Method pattern • The Abstract Factory pattern “Design patterns are recurring solutions to design problems you see over and over.” [Smalltalk Companion] Factory Design Patterns
But et portée (1) But:que fait un patron ? • Les patrons d’instanciation s’intéressent au processus de création d’objets Portée : à quel niveau s’applique un patron? Au niveau des classes ou des objets? Factory Design Patterns
But et portée (2) • Les patrons au niveau des classes s’occupent des relations entre les classes et les sous-classes. Ces relations sont fixées statiquement à la compilation. • Les patrons de création au niveau des classes délèguent une partie de la création des objets aux sous-classes. • Les patrons au niveau des objets s’occupent des relations entre les objets, lesquels sont plus dynamiques et peuvent être modifiées à l’exécution • Les patrons de création au niveau des objets délèguent la création à d’autres objets. • Les patrons de “factory” permettent de configurer un système avec des objets qui peuvent varier notablement en termes de structure et de fonctions Factory Design Patterns
Factory pattern: principes (1) • La création d’objets avec des comportements spécifiques demande plus que la simple instanciation d’une classe • La plus grande barrière au changement réside dans l’encodage direct (“hard-coding”) des classes qui peuvent être instanciées • Encoder directement un nombre fixe de comportements Définir un plus petit ensemble de comportements fondamentaux qui peuvent être composés Factory Design Patterns
Imprimer la trace d’un programme public interface Trace { // turn on and off debugging public void setDebug( boolean debug ); // write out a debug message public void debug( String message ); // write out an error message public void error( String message );} Factory Design Patterns
Imprimer la trace dans un fichier public class FileTrace implements Trace { private java.io.PrintWriter pw; private boolean debug; public FileTrace() throws java.io.IOException { // a real FileTrace would need to obtain the filename somewhere // for the example I'll hardcode it pw = new java.io.PrintWriter( new java.io.FileWriter( "c:\trace.log" ) ); } public void setDebug( boolean debug ) { this.debug = debug; } public void debug( String message ) { if( debug ) { // only print if debug is true pw.println( "DEBUG: " + message ); pw.flush(); } } public void error( String message ) { // always print out errors pw.println( "ERROR: " + message ); pw.flush(); }} Factory Design Patterns
Imprimer la trace sur la console public class SystemTrace implements Trace { private boolean debug; public void setDebug( boolean debug ) { this.debug = debug; } public void debug( String message ) { if( debug ) { //only print if debug is true System.out.println( "DEBUG: " + message); } } public void error( String message ) { // always print out errors System.out.println( "ERROR: " + message ); }} Factory Design Patterns
Pour utiliser l’un ou l’autre système //... some code ...SystemTrace log = new SystemTrace(); //... code ...log.debug( "entering loog" );// ... etc ... Factory Design Patterns
Factory pattern: principes (2) • Les patrons de création rendent le design • plus flexible • pas nécessairement plus petit • Les patrons de création fournissent diverses manières • de supprimer les références explicites aux classes concrètes • dans la partie du code où doit se faire l’instanciation Factory Design Patterns
Factory pattern: Principes (3) • Créer une abstraction qui décide quelle classe, parmi celles qui sont acceptables, il faut rendre. • Par la suite, il suffit d’invoquer les méthodes de l’instance de cette classe sans connaître de quelle classe il s’agit exactement. • Un patron simple de “factory” rend une instance d’une des nombreuses classes acceptables en fonction des données qui lui sont fournies. • En général, • toutes les classes qui sont rendues possèdent un ancêtre commun et des méthodes communes, • toutefois chacune accomplit ses tâches différemment et est optimisée pour différentes sortes de données Factory Design Patterns
Factory pattern: Principes (4) • La classe Factory décide de la sous-classe (Child1 ou Child2) qui sera instanciée Factory Design Patterns
Factory pattern: exemple publicclass Parent { protected String first; protected String second; … } public class Child1 extends Parent {} public class Child2 extends Parent {} public class ParentFactory { public Parent getParent(String argument) { if (argument.equals(…)) return new Child1(argument); else return new Child2(argument); } } Factory Design Patterns