Transcript
Page 1: Factory Method - Técnica

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

Page 2: Factory Method - Técnica

Factory Method

Page 3: Factory Method - Técnica

“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]

Page 4: Factory Method - Técnica

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;

Page 5: Factory Method - Técnica

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;

Page 6: Factory Method - Técnica

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;

Page 7: Factory Method - Técnica

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.

Page 8: Factory Method - Técnica

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?

Page 9: Factory Method - Técnica

A Solução

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

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

Page 10: Factory Method - Técnica

Estrutura

Page 11: Factory Method - Técnica

A Lógica

Page 12: Factory Method - Técnica

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;

Page 13: Factory Method - Técnica

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;

Page 14: Factory Method - Técnica

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;

Page 15: Factory Method - Técnica

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.

Page 16: Factory Method - Técnica

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;

Page 17: Factory Method - Técnica

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.

Page 18: Factory Method - Técnica

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

Page 19: Factory Method - Técnica

Padrões Relacionados• Abstract Factory

• Template Method

• Prototype

Page 20: Factory Method - Técnica

Factory Method - Exemplos

Page 21: Factory Method - Técnica

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.

Page 22: Factory Method - Técnica

Diagrama

Page 23: Factory Method - Técnica

Solução

Page 24: Factory Method - Técnica

Solução

Page 25: Factory Method - Técnica

Solução

Page 26: Factory Method - Técnica

Solução

Page 27: Factory Method - Técnica

Solução

Page 28: Factory Method - Técnica

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.

Page 29: Factory Method - Técnica

Exemplo 02

Cliente tem que preparar Pizza

Page 30: Factory Method - Técnica

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.

Page 31: Factory Method - Técnica

Exemplo 02

Page 32: Factory Method - Técnica

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;

Page 33: Factory Method - Técnica

Exemplo 02

Page 34: Factory Method - Técnica

Solução

Page 35: Factory Method - Técnica

Solução

Page 36: Factory Method - Técnica

Solução

Page 37: Factory Method - Técnica

Solução

Page 38: Factory Method - Técnica

Solução

Page 39: Factory Method - Técnica

Solução

Page 40: Factory Method - Técnica

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.

Page 41: Factory Method - Técnica

Diagrama

Page 42: Factory Method - Técnica

Solução

Page 43: Factory Method - Técnica

Solução

Page 44: Factory Method - Técnica

Solução

Page 45: Factory Method - Técnica

Solução

Page 46: Factory Method - Técnica

Solução

Page 47: Factory Method - Técnica

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.

Page 48: Factory Method - Técnica

Diagrama

Page 49: Factory Method - Técnica

Solução

Page 50: Factory Method - Técnica

Solução

Page 51: Factory Method - Técnica

Solução

Page 52: Factory Method - Técnica

Solução

Page 53: Factory Method - Técnica

Solução

Page 54: Factory Method - Técnica
Page 55: Factory Method - Técnica

Top Related