Anda di halaman 1dari 55

Instituto Federal de Educao, Cincia e Tecnologia

da Paraba campus Cajazeiras


Curso: Anlise e Desenvolvimento de Sistemas
Professor: Rodrigo
Disciplina: Padres de Projeto

Padro de Criao de Objetos


Factory Method
Ftima Ferreira
Srgio Diniz

Factory Method

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 instanciamento s subclasses. [GoF]

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.

Tambm conhecido como virtual construtor;

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.

Factory Method define uma interface comum para criar


objetos;
O objeto especfico determinado nas diferentes
implementaes dessa interface;
Factory Method so mtodos (podem ser estticos) que
retornam uma instncia de uma classe;

Inteno
Separa assim:
Uma "familia" de classes dotadas da mesma interface
("produtos"); e

Uma classe ("fabrica") que possui um mtodo especial (o


factory method) que cria tais objetos;

Motivao
Construir objetos individuais sem que a construo
requeira conhecimentos das classes especficas que esto
sendo instanciadas;

Criar uma classe de abstrao que decide qual das opes


de classe retornar sem que a classe retornada seja de prvio
conhecimento.

O Problema

Framework especfico para uma aplicao que manipula documentos


multimdia;
possvel criar um framework mais genrico, para qualquer aplicao
de manipulao de documentos?

A Soluo

Classes abstratas implementam as funes comuns a todo tipo de


documento;
Mtodo fbrica definido na superclasse e implementado na
subclasse.

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:

Uma classe no pode antecipar ou conhecer a


classe dos objetos que deve criar;
Uma classe quer suas subclasses para especificar
os objetos que cria;
Voc precisa criar um objeto mas voc no quer
usar a diretiva NEW na classe cliente;

Aplicabilidade
Isso comum numa aplicao bem desenhada onde

variveis so estruturadas com base em interfaces. Assim,


vrios tipos de objetos diferentes podem ser associadas a
essa varivel.

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,

clientes podem ter que


especializar a classe Fabrica apenas para criar
um objeto ProdutoConcreto particular;

Padres Relacionados
Abstract Factory
Template Method
Prototype

Factory Method - Exemplos

Exemplo 01
Suponha

que ns temos que desenvolver


um sistema de consulta de informaes de
veculos Celta, palio, gol e vectra.
Informamos qual carro queremos consultar e
recebemos as informaes sobre estes
carros. Mas no queremos que as classes
concretas fiquem muito acopladas a nossa
classe cliente.

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

Cliente tem que


preparar Pizza

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

Anda mungkin juga menyukai