Abstract Factory 0821369 – Gustavo Lopes Mourad
Gustavo Lopes Mourad © LES/PUC-Rio 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 25/03/2017 Gustavo Lopes Mourad © LES/PUC-Rio
Gustavo Lopes Mourad © LES/PUC-Rio Motivação Como garantir uma interface que funcione para diversos “look-and-feels” (Motif, Qt (KDE), Windows, etc.) ? 25/03/2017 Gustavo Lopes Mourad © LES/PUC-Rio
Gustavo Lopes Mourad © LES/PUC-Rio 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 25/03/2017 Gustavo Lopes Mourad © LES/PUC-Rio
Gustavo Lopes Mourad © LES/PUC-Rio Estrutura Diagrama de classes 25/03/2017 Gustavo Lopes Mourad © LES/PUC-Rio
Participantes e Colaborações Fábrica Abstrata – Interface para operações que criam Objetos-produto 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 25/03/2017 Gustavo Lopes Mourad © LES/PUC-Rio
Gustavo Lopes Mourad © LES/PUC-Rio 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 25/03/2017 Gustavo Lopes Mourad © LES/PUC-Rio
Gustavo Lopes Mourad © LES/PUC-Rio Exemplo de Código 25/03/2017 Gustavo Lopes Mourad © LES/PUC-Rio
Gustavo Lopes Mourad © LES/PUC-Rio 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. 25/03/2017 Gustavo Lopes Mourad © LES/PUC-Rio
Nome do Autor © LES/PUC-Rio Fim Dúvidas? 25/03/2017 Nome do Autor © LES/PUC-Rio