Patterns: Factory Method

Post on 19-Jul-2015

148 views 1 download

Transcript of Patterns: Factory Method

Instituto Federal de Educação, Ciência e Tecnologiada Paraíba – campus CajazeirasCurso: Análise e Desenvolvimento de SistemasProfessor: RodrigoDisciplina: Padrões de Projeto

Fátima FerreiraSérgio Diniz

Padrão de Criação de ObjetosFactory Method

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]

Intenção

• Definir uma interface para criação de objetos, permitindo asubclasse decidir qual das implementações deve serinstanciada;

• Factory Method faz uma classe delegar a instanciação asubclasses;

• Retornar uma instância, dentre muitas possíveis classes,dependendo dos dados providos a ele.

• Também conhecido como virtual construtor;

Intenção• É possível criar um objeto sem ter conhecimento algum dasua classe concreta?

• Esse conhecimento deve estar em alguma parte dosistema, mas não precisa estar necessariamente no cliente.

• Factory Method define uma interface comum para criarobjetos;

•O objeto específico é determinado nas diferentesimplementações dessa interface;

•Factory Method são métodos (podem ser estáticos) queretornam uma instância de uma classe;

Intenção• Separa assim:• Uma "familia" de classes dotadas da mesma interface

("produtos"); e

• Uma classe ("fabrica") que possui um método especial (ofactory method) que cria tais objetos;

Motivação• Construir objetos individuais sem que a construçãorequeira conhecimentos das classes específicas que estãosendo instanciadas;

• Criar uma classe de abstração que decide qual das opçõesde classe retornar sem que a classe retornada seja de prévioconhecimento.

O Problema

• Framework específico para uma aplicação que manipula documentos multimídia;

• É possível criar um framework mais genérico, para qualquer aplicação de manipulação de documentos?

A Solução

• Classes abstratas implementam as funções comuns a todo tipo dedocumento;

• Método fábrica é definido na superclasse e implementado nasubclasse.

Estrutura

A Lógica

Participantes• Product• Define a interface dos objetos que o Factory Method cria.

• ConcreteProduct• Classes que vão implementar a interface definida em produto.

São as diferentes Classes que podem ser instanciadas;

Participantes• Creator• Declara o Factory Method (método de criação) o qual retorna um

objeto do tipo Product (Produto). A Fábrica também pode definiruma implementação básica do Factory Method, que retorne umobjeto ProdutoCreate básico.

• ConcreteCreator• Sobrescreve o método de produção para retornar um objeto da

classe ConcreteProduct;

Aplicabilidade• Use Factory Method quando:•Uma classe não pode antecipar ou conhecer a

classe dos objetos que deve criar;

•Uma classe quer suas subclasses para especificaros objetos que cria;

• Você precisa criar um objeto mas você não querusar a diretiva NEW na classe cliente;

Aplicabilidade Isso é comum numa aplicação bem desenhada ondevariáveis são estruturadas com base em interfaces. Assim,vários tipos de objetos diferentes podem ser associadas aessa variável.

Colaborações

• A criação dos objetos é de responsabilidade daclasse de produção que deve retornar um objetode uma classe apropriada;

• A Fábrica depende das suas subclasses para definiro método fábrica de maneira que retorne umainstância da ProdutoConcreto;

Consequências•Melhor Extensibilidade

• Elimina a necessidade de montar um código em função a umaclasse específica. No nosso exemplo de aplicação, o código sólida com uma interface chamada Product.

• Fornecer ganchos para subclasses

• Esse padrão de projeto dá maior flexibilidade para as classes,pois criar um objeto em uma classe que utiliza o FactoryMethod é melhor que fazê-lo em separado, funcionando,assim, como uma conexão para que uma das subclassesforneçam uma versão estendida de um objeto.

Desvantagens• Eventualmente, clientes podem ter queespecializar a classe Fabrica apenas para criarum objeto ProdutoConcreto particular;

Padrões Relacionados• Abstract Factory

• Template Method

• Prototype

Factory Method - Exemplos

Exemplo 01 Suponha que nós temos que desenvolverum sistema de consulta de informações deveículos Celta, palio, gol e vectra.Informamos qual carro queremos consultar erecebemos as informações sobre estescarros. Mas não queremos que as classesconcretas fiquem muito acopladas a nossaclasse cliente.

Diagrama

Solução

Solução

Solução

Solução

Solução

Exemplo 02 Imagine a implementação de um sistema para controle deuma pizzaria. A pizzaria dispõem de alguns tipos de pizza(pizza grega de molusco estilo Cajazeiras, pizza portuguesaestilo Sousa...), bem como os serviços responsáveis parafabricar uma pizza (preparar a pizza, assar, cortar eempacotar);

Problema... As pizzas estão 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 ouadicionar novas pizzas?

O que acontece se houver vários pontos de instanciaçãodestas pizzas?

Problema de ACOPLAMENTO Classes clientes devem conhecer as subclasses de Pizza.

Mudanças na hierarquia (no nome das classes por exemplo)provocam mudanças em todos os pontos de instanciação das pizzas.

Pode haver muitos pontos dependendo do sistema.

Exemplo 02

Exemplo 02 Solução ENCAPSULAR a criação das Pizzas em outro objeto que sabe como

criar instanciar objetos das subclasses pizzas.

Dessa maneira todo código que for instanciar pizzas, utiliza a classefábrica (pizzaria) para criar estes objetos.

Baixo acoplamento, já que mudanças nas classes são absorvidaspela fábrica;

Somente fábrica conhece as Pizzas concretas;

Exemplo 02

Solução

Solução

Solução

Solução

Solução

Solução

Exemplo 03 Imagine a seguinte situação:

Desenvolver um sistema de radar que executa asseguintes operações: envia um sinal para central decontrole, corrigir o tempo verificação e processar osinal capturado. Sabendo que o terreno exercegrande influência no modo de operação eprocessamento do radar. Ou seja, em terrenosplanos, aquáticos e montanhosos o radar vaiapresentar comportamentos distintos.

Diagrama

Solução

Solução

Solução

Solução

Solução

Atividade Imagine que você foi contratado para desenvolver jogo deestratégia. Neste jogo nós temos três inimigos o zumbi,Feiticeiro e o Troll que ataca, vira pra esquerda, vira pradireita, anda pra frente e para trás.

Imagine que temos que instanciar esses objetos na nossaaplicação de maneira que o código cliente não fique muitoacoplado as classes concretas.

Diagrama

Solução

Solução

Solução

Solução

Solução