View
105
Download
0
Category
Preview:
Citation preview
Padrão Abstract Factory
Projeto de Sistemas de Software
Hazel Carvalho Crato
© LES/PUC-Rio
Sumário
• Abstract Factory
– Propósito
– Motivação
– Aplicabilidade
– Estrutura
– Participantes
– Colaborações
– Conseqüências
– Exemplo de Código
© LES/PUC-Rio
Abstract Factory
• É classificado como um padrão de criação, também conhecido como Kit.
• Propósito
– Prover uma interface para criar famílias de objetos relacionados ou dependentes sem especificar suas classes concretas.
© LES/PUC-Rio
Motivação
Exemplo 1:
© LES/PUC-Rio
Motivação
Exemplo 2:
© LES/PUC-Rio
Motivação
• Diferentes padrões look-and-feel definem diferentes aparências (look) e comportamentos (feel) para um widget de uma interface de usuário. Exemplos: barras de rolagem, janelas, botões etc.
• Para ser portável através dos padrões look-and-feel, uma aplicação não deve instanciar os widgets diretamente de suas classes concretas para uma aparência ou comportamento particular.
• Para facilitar a alteração da aparência e do comportamento futuramente, defina uma classe abstrata GUIFactory que declara uma interface para criar cada tipo de widget básico.
• Defina ainda uma interface para cada tipo de widget e subclasses concretas que implementam widgets para um específico padrão look-and-feel.
© LES/PUC-Rio
Motivação
• A interface de GUIFactory possui uma operação que retorna um novo widget concreto para cada widget abstrato.
• Há uma sub-classe concreta de GUIFactory para cada padrão look-and-feel.
• Cada sub-classe implementa as operações para criar o widget apropriado para o respectivo look-and-feel.
• Clientes criam os widgets apenas através da GUIFactory sem saber quem são widgets concretos para um específico look-and-feel.
• Uma GUIFactory reforça as dependências entre as classes concretas de widgets.
© LES/PUC-Rio
Aplicabilidade
• O padrão deve ser usado quando:
– Um sistema deve ser implementado independente de como os produtos são criados, compostos e representados.
– Um sistema deve ser configurado com uma das múltiplas famílias de produtos.
– Uma familia de um produto relacionado é projetada para ser utilizada junta, e faz-se necessário o reforço dessa restriçao.
– Deseja-se prover uma biblioteca de classes de produtos e deseja-se revelar apenas as suas interfaces, mas não suas implementações.
© LES/PUC-Rio
Estrutura
© LES/PUC-Rio
Participantes
• AbstractFactory – Declara uma interface para operações que criam produtos
abstratos.
• ConcreteFactory – Implementa as operações para criar produtos concretos.
• AbstractProduct – Declara uma interface para um tipo de produto.
• ConcreteProduct – Define um produto a ser criado pela fábrica concreta
correspondente.
– Implementa a interface AbstractProduct.
• Client – Usa apenas interfaces declaradas pelas classes AbstractFactory
e AbstractProduct.
© LES/PUC-Rio
Colaborações
• Normalmente uma única instância da classe ConcreteFactory é criada em tempo de execução.
• AbstractFactory delega a criação de produtos concretos para a respectiva subclasse ConcreteFactory.
• A classe ConcreteFactory cria produtos que possuem uma implementação particular, por exemplo: todos os widgets de uma WinFactory concreta.
© LES/PUC-Rio
Conseqüências
• Vantagens
– Abstract Factory isola classes concretas.
– Facilita o intercâmbio de famílias de produtos.
– Promove consistência entre produtos.
• Desvantagem
– Suporte a novos tipos de produtos é dicífil.
Exemplo de Código
© LES/PUC-Rio
Estrutura
© LES/PUC-Rio
Abstract Factory
© LES/PUC-Rio
Concrete Factory
© LES/PUC-Rio
Abstract Product
© LES/PUC-Rio
Concrete Product
© LES/PUC-Rio
Transfer Object
© LES/PUC-Rio
Client
Perguntas?
Recommended