Padrões de Projeto
Abstract Factory
Abstract Factory
• Propósito
Prover uma interface para criar uma família de objetos relacionados ou dependentes
sem especificar suas classes
concretas
• Motivação
© LES/PUC-Rio
Abstract Factory
© LES/PUC-Rio
Abstract Factory
• Aplicabilidade
– Um sistema deve ser implementado independente de como seus
produtos são criados, compostos e representados.
– Um sistema deve ser configurado com uma de muitas famílias de
produtos.
– Uma família de produtos foi desenvolvida para ser usada junta e é
preciso reforçar esta restrição.
– Você quer fornecer uma biblioteca de classes de produtos e quer expor
apenas as interfaces sem expor as implementações
© LES/PUC-Rio
Abstract Factory
• Estrutura
© LES/PUC-Rio
Abstract Factory
• Participantes
– AbstractFactory
• Declara uma interface para a criação de objetos abstratos.
– ConcreteFactory
• Implementa as operações que criam objetos concretos.
– AbstractProduct
• Declara uma interface para um tipo de objeto.
– ConcreteProduct
• Define um objeto a ser criado pela fábrica concreta correspondente
e implementa a interface de AbstractProduct.
– Client
• Utiliza somente as interfaces declaradas pelas classes
AbstractFactory e AbstractProduct.
© LES/PUC-Rio
Abstract Factory
• Colaborações
– Normalmente uma única instância de uma classe
ConcreteFactory é criada em tempo de execução. Essa
ConcreteFactory cria objetos tendo uma implementação
particular. Para criar produtos diferentes, clientes devem usar
uma ConcreteFactory diferente.
– AbstractFactory depende de suas subclasses ConcreteFactory
para criar objetos de produtos.
• Conseqüências
– O padrão isola classes concretas.
– Facilita o câmbio de famílias de produtos.
– Promove a consistência entre produtos
– Do lado negativo: dar suporte a novos tipos de produtos é
difícil
© LES/PUC-Rio
Abstract Factory
• Exemplo
© LES/PUC-Rio
Abstract Factory
© LES/PUC-Rio
Abstract Factory
• Referências
– Padrões de Projeto – GoF
GAMMA, E.; HELM, R.; JOHNSON, R.; VLISSIDES, J..Padrões de
Projeto: Soluções Reutilizáveis de Software Orientado a Objetos.
Trad. Luiz A. M. Salgado. – Porto Alegre: Bookman, 2000.
© LES/PUC-Rio
Download

Slide - (LES) da PUC-Rio