Factory Design Patterns Raffaella Sanna Sylvain Giroux
Factory Design Patterns Contents Factory patterns: principesFactory patterns: 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]
Factory Design Patterns But et portée (1) Buts INSTANCIATION INSTANCIATIONSTRUCTURE COMPORTEMENT COMPORTEMENT Portée CLASSE Factory MethodAdapterInterpreter Template Method OBJETAbstract Factory Builder Prototype Singleton Adapter Bridge Composite Decorator Facade Proxy Chain of Responsibility Command Iterator Mediator Memento Flyweight Observer State Strategy Visitor 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 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 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, lesquelles sont plus dynamiques et peuvent être modifiées à l’exécutionLes patrons au niveau des objets s’occupent des relations entre les objets, lesquelles 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 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 fonctionsLes 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 classeLa 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éesLa 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 comportementsEncoder directement un nombre fixe de comportements Définir un plus petit ensemble de comportements Définir un plus petit ensemble de comportements fondamentaux qui peuvent être composés
Factory Design Patterns Factory pattern: principes (2) Les patrons de création rendent le designLes patrons de création rendent le design plus flexibleplus flexible pas nécessairement plus petitpas 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’instanciationLes 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.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.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.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,En général, toutes les classes qui sont rendues possèdent un ancêtre commun et des méthodes communes,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éestoutefois 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éeLa classe Factory décide de la sous-classe ( Child1 ou Child2 ) qui sera instanciée
Factory Design Patterns Factory pattern: exemple public class Parent { protected String first; protected String first; protected String second; protected String second; … } public class Child1 extends Parent {} public class Child2 extends Parent {} public class ParentFactory { public Parent getParent(String argument) public Parent getParent(String argument) { if (argument.equals(…)) if (argument.equals(…)) return new Child1(argument); return new Child1(argument); else else return new Child2(argument); return new Child2(argument); } } } }