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