Padrão Abstract Factory
Projeto de Sistemas de Software
Hazel Carvalho Crato
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.
© LES/PUC-Rio
Exemplo de Código
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
© LES/PUC-Rio
Perguntas?
Download

Slides - (LES) da PUC-Rio