Projeto de Sistemas de Software Fernando de Freitas Silva Factory Method Projeto de Sistemas de Software Fernando de Freitas Silva
Factory Method Propósito Também conhecido como: 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) ConcreteProduct (MyDocument) 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 © LES/PUC-Rio