Abstract Factory 0821369 – Gustavo Lopes Mourad Propósito • Padrão de Criação • “Fornecer uma interface para criação de famílias de objetos relacionados ou dependentes sem especificar classes concretas.” • Conhecido também como Kit 05/11/2015 Gustavo Lopes Mourad © LES/PUC-Rio 2 Motivação • Como garantir uma interface que funcione para diversos “look-and-feels” (Motif, Qt (KDE), Windows, etc.) ? 05/11/2015 Gustavo Lopes Mourad © LES/PUC-Rio 3 Aplicabilidade • Diminuir acoplamento entre sistemas • Revelar somente as interfaces (sem as implementações) ao disponibilizar uma API • Garantir que uma família de objetos seja sempre utilizada em conjunto 05/11/2015 Gustavo Lopes Mourad © LES/PUC-Rio 4 Estrutura • Diagrama de classes 05/11/2015 Gustavo Lopes Mourad © LES/PUC-Rio 5 Participantes e Colaborações • Participantes – Fábrica Abstrata – Interface para operações que criam Objetosproduto abstratos – Fábrica Concreta – Implementa a Fábrica Abstrata. – Produto Abstrato – Interface para um Objeto-Produto – Produto Concreto – Implementa um Objeto-Produto a ser criado – Cliente – Utiliza as interfaces • Colaborações – Abstract Factory delega a criação de novos objetos para Concrete Factory – Cada Produto precisa de uma Fábrica específica 05/11/2015 Gustavo Lopes Mourad © LES/PUC-Rio 6 Conseqüencias • Isolamento das classes concretas – Diminuição do acoplamento entre sistemas – Controle sobre criação de novos objetos • Facilita a troca de implementações – A troca de implementações não afeta a classe cliente • Promove harmonia entre objetos – Assegura que um conjunto de objetos sempre trabalharão da forma a qual foram projetados • Diminui a flexibilidade dos objetos criados – Interface da Fábrica deveria ser extendida 05/11/2015 Gustavo Lopes Mourad © LES/PUC-Rio 7 Exemplo de Código 05/11/2015 Gustavo Lopes Mourad © LES/PUC-Rio 8 Referências • Gamma, E; Helm, R; Johnson, R; Vlissides, J; Design Patterns – elements of reusable object-oriented software; Addison Wesley Longman, Inc., 1995. • Freeman, E; Freeman, E; Bates, B; Sierra, K; Head First Design Patterns, O’Reily Media, Inc. 2004. 05/11/2015 Gustavo Lopes Mourad © LES/PUC-Rio 9 Fim Dúvidas? 05/11/2015 Nome do Autor © LES/PUC-Rio 10