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