Factory Method
Projeto de Sistemas de Software
Fernando de Freitas Silva
Factory Method
• Propósito
– Definir uma interface para criar um objeto, mas deixar que
subclasses decidam que classe instanciar.
– Factory Method permite que uma classe delegue a
responsabilidade de instanciação às subclasses.
• Também conhecido como:
– Virtual Constructor
© LES/PUC-Rio
Motivação
• Framework para manipulação de documentos “genéricos”:
–
Queremos delegar para a instanciação do framework a criação do
documento, mas o gerenciamento em si é realizado no próprio
framework.
• Existem coisas em comum nos métodos referentes à criação
do manipulador e do documento anteriores?
© LES/PUC-Rio
Aplicabilidade
• Uma classe não sabe que objeto, especificamente, deve
criar.
• Quando deseja-se postergar a criação para o “especialista”
que cria o objeto: a subclasse com o factory method
implementado.
• Quando deseja-se saber qual dos “especialistas” recebe a
delegação de criação do objeto, e em que lugar (do
sistema) isso é definido.
© LES/PUC-Rio
Estrutura
© LES/PUC-Rio
Participantes
• Product (Document)
– Define a interface dos objetos que o factory method cria
• ConcreteProduct (MyDocument)
– Implementa a interface do produto.
• Creator (Application)
– Declara o factory method, o qual retorna um objeto do tipo Product.
– Pode chamar o factory method para criar um objeto Product.
• ConcreteCreator (MyApplication)
– Redefine o factory method para retornar uma instância de um
ConcretProduct.
© LES/PUC-Rio
Colaborações
• Criador confia em suas subclasses para definir o método da
fábrica de forma que ela devolva um exemplo de
ConcretProduct apropriado.
© LES/PUC-Rio
Conseqüências
• Factory Methods eliminam a necessidade de colocar classes
específicas da aplicação no código
– O código só lida com a interface Produto
– O código pode portanto funcionar com qualquer classe ProdutoConcreto
• Provê ganchos para subclasses
– Criar objetos dentro de uma classe com um Factory Method é sempre
mais flexível do que criar objetos diretamente
– O Factory Method provê um gancho para que subclasses forneçam uma
versão estendida de um objeto
• Provê ganchos para subclasses
– Criar objetos dentro de uma classe com um Factory Method é sempre
mais flexível do que criar objetos diretamente
– O Factory Method provê um gancho para que subclasses forneçam uma
versão estendida de um objeto
© LES/PUC-Rio
Download

Slides - (LES) da PUC-Rio