Padrões de projeto detalhados
Factory Method, Abstract Factory
Nazareno Andrade
Padrões de projeto (GoF)



De criação
Estruturais
De comportamento
Problema-exemplo
Sistema para criar e exibir currículo
Um currículo tem página de rosto, página de
conteúdo e página de encerramento
Design?
Problema: queremos agora um currículo resumido
que tem as mesmas funcionalidades do original,
mas uma página de conteúdo diferente
Factory Method
Intenção

Definir uma interface para criar objetos, mas deixar as
subclasses decidirem que classe instanciar. Permite adiar a
instanciação para subclasses.
Aplicabilidade


classe não conhece antecipadamente a classe dos objetos
que deve criar
classe quer que suas subclasses especifiquem os objetos que
criam
6
Colaborações
Problema-exemplo 2
Serviço de envio de pedidos
Inicialmente enviamos sempre por email
Queremos agora enviar via REST para
fornecedores maiores
Problema
Como garantir que, em um contexto, mensagem
e serviço de mensagem serão da mesma
“Família”?
Isso acontece por exemplo no look-and-feel de
interfaces gráficas
Solução: Abstract Factory
Solução: Fornece uma interface para a criação de
uma família de objetos relacionados ou
dependentes sem especificar classes concretas.
UML
Aplicabilidade




um sistema deve ser independente de como seus produtos são
criados, compostos ou representados
um sistema deve ser configurado como um produto de uma
família de múltiplos produtos
uma família de objetos-produto for projetada para ser usada
em conjunto e você necessita garantir esta restrição
você quer fornecer uma biblioteca de classes de produtos e
quer revelar somente suas interfaces, não suas
implementações
Factory Method, Abstract Factory
12
Conseqüências




isolamento das classes concretas
torna fácil a troca de famílias de produtos
promove a harmonia entre produtos
é difícil, porém, suportar novos tipos de produtos
Factory Method, Abstract Factory
13
Usos conhecidos



Família de classes necessária para lidar com
banco de dados
Família de classes necessária para lidar com
placa de rede
Família de classes para lidar com look-andfeel das interfaces
Dúvidas?
Download

10.FactoryMethod-AbstractFactory