Factory Method
Inteno
Definir uma interface para criao de objetos, permitindo a
subclasse decidir qual das implementaes deve ser
instanciada;
Factory Method faz uma classe delegar a instanciao a
subclasses;
Retornar uma instncia, dentre muitas possveis classes,
dependendo dos dados providos a ele.
Inteno
possvel criar um objeto sem ter conhecimento algum da
sua classe concreta?
Esse conhecimento deve estar em alguma parte do
sistema, mas no precisa estar necessariamente no cliente.
Inteno
Separa assim:
Uma "familia" de classes dotadas da mesma interface
("produtos"); e
Motivao
Construir objetos individuais sem que a construo
requeira conhecimentos das classes especficas que esto
sendo instanciadas;
O Problema
A Soluo
Estrutura
A Lgica
Participantes
Product
Define a interface dos objetos que o Factory Method cria.
ConcreteProduct
Classes que vo implementar a interface definida em produto.
So as diferentes Classes que podem ser instanciadas;
Participantes
Creator
Declara o Factory Method (mtodo de criao) o qual retorna um
objeto do tipo Product (Produto). A Fbrica tambm pode definir
uma implementao bsica do Factory Method, que retorne um
objeto ProdutoCreate bsico.
ConcreteCreator
Sobrescreve o mtodo de produo para retornar um objeto da
classe ConcreteProduct;
Aplicabilidade
Use Factory Method quando:
Aplicabilidade
Isso comum numa aplicao bem desenhada onde
Colaboraes
A criao dos objetos de responsabilidade da
classe de produo que deve retornar um objeto
de uma classe apropriada;
A Fbrica depende das suas subclasses para definir
o mtodo fbrica de maneira que retorne uma
instncia da ProdutoConcreto;
Consequncias
Melhor Extensibilidade
Elimina a necessidade de montar um cdigo em funo a uma
classe especfica. No nosso exemplo de aplicao, o cdigo s
lida com uma interface chamada Product.
Fornecer ganchos para subclasses
Esse padro de projeto d maior flexibilidade para as classes,
pois criar um objeto em uma classe que utiliza o Factory
Method melhor que faz-lo em separado, funcionando,
assim, como uma conexo para que uma das subclasses
forneam uma verso estendida de um objeto.
Desvantagens
Eventualmente,
Padres Relacionados
Abstract Factory
Template Method
Prototype
Exemplo 01
Suponha
Diagrama
Soluo
Soluo
Soluo
Soluo
Soluo
Exemplo 02
Imagine a implementao de um sistema para controle de
uma pizzaria. A pizzaria dispem de alguns tipos de pizza
(pizza grega de molusco estilo Cajazeiras, pizza portuguesa
estilo Sousa...), bem como os servios responsveis para
fabricar uma pizza (preparar a pizza, assar, cortar e
empacotar);
Problema...
As pizzas esto sendo instanciadas na classe cliente.
Quando cliente quer preparar uma nova pizza, ele mesmo o faz.
Exemplo 02
Exemplo 02
O que fazer para suprimir uma pizza da classe principal ou
adicionar novas pizzas?
O que acontece se houver vrios pontos de instanciao
destas pizzas?
Problema de ACOPLAMENTO
Classes clientes devem conhecer as subclasses de Pizza.
Mudanas na hierarquia (no nome das classes por exemplo)
provocam mudanas em todos os pontos de instanciao das pizzas.
Pode haver muitos pontos dependendo do sistema.
Exemplo 02
Exemplo 02
Soluo
ENCAPSULAR a criao das Pizzas em outro objeto que sabe como
criar instanciar objetos das subclasses pizzas.
Dessa maneira todo cdigo que for instanciar pizzas, utiliza a classe
fbrica (pizzaria) para criar estes objetos.
Baixo acoplamento, j que mudanas nas classes so absorvidas
pela fbrica;
Somente fbrica conhece as Pizzas concretas;
Exemplo 02
Soluo
Soluo
Soluo
Soluo
Soluo
Soluo
Exemplo 03
Imagine a seguinte situao:
Desenvolver um sistema de radar que executa as
seguintes operaes: envia um sinal para central de
controle, corrigir o tempo verificao e processar o
sinal capturado. Sabendo que o terreno exerce
grande influncia no modo de operao e
processamento do radar. Ou seja, em terrenos
planos, aquticos e montanhosos o radar vai
apresentar comportamentos distintos.
Diagrama
Soluo
Soluo
Soluo
Soluo
Soluo
Atividade
Imagine que voc foi contratado para desenvolver jogo de
estratgia. Neste jogo ns temos trs inimigos o zumbi,
Feiticeiro e o Troll que ataca, vira pra esquerda, vira pra
direita, anda pra frente e para trs.
Imagine que temos que instanciar esses objetos na nossa
aplicao de maneira que o cdigo cliente no fique muito
acoplado as classes concretas.
Diagrama
Soluo
Soluo
Soluo
Soluo
Soluo