Buscar

FACTORY_METHOD

Esta é uma pré-visualização de arquivo. Entre para ver o arquivo original

*
*
PADRÕES DE CRIAÇÃO
FACTORY METHOD
*
*
FACTORY METHOD
Define uma classe para criação de um objeto, mas permite que as subclasses escolham qual classes instanciar. O factory method permite delegar a instanciação para as subclasses.
Contém os seguintes elementos:
Creator — declara o factory method (método de fabricação) que retorna o objeto da classe Product (produto). Este elemento também pode definir uma implementação básica que retorna um objeto de uma classe ConcreteProduct (produto concreto) básica;
ConcreteCreator — sobrescreve o factory method e retorna um objeto da classe ConcreteProduct;
Product — define uma interface para os objectos criados pelo factory method;
ConcreteProduct — uma implementação para a interface Product.
Muito utilizado em frameworks.
O padrão Factory Method propõe uma solução que deixa para o cliente (a implementação da aplicação) a tarefa de suportar os formatos necessários e para o framework o papel de definição de uma abstração que oferece uma interface única para criação de documentos.
*
*
FACTORY METHOD
Este framework seria baseado em duas classes abstratas, que representam a Aplicação e o Documento. O cliente do framework fornece um par de classes concretas, uma aplicação e o respectivo documento, para cada um dos formatos de Documento suportados pela Aplicação. Se for necessário apresentar um documento que suporte desenho, por exemplo, o cliente deve disponibilizar as classes AplicacaoDesenho e DocumentoDesenho (supondo que o sufixo "Desenho" indique classes que suportam esta funcionalidade).
O objetivo do Factory Method está em diversas classes que implementam a mesma operação, retornarem o mesmo tipo abstrato, mas internamente instanciam diferentes classes que o implementam. Com o Factory Method o criador do objeto faz uma escolha de qual classe instanciar para o cliente. Para ser um Factory Method o método precisa retornar uma interface ou uma classe abstrata e, dependendo das necessidades do cliente, criar um objeto determinado como retorno.
*
*
FACTORY METHOD
*
*
FACTORY METHOD
Conceito: É uma interface para instanciação de objetos que mantém isoladas as classes concretas usadas da requisição da criação destes objetos.
Categoria: padrão de criação
Aplicabilidade: Nos momentos em que temos uma classe que não pode antecipar a classe a ser criada; quado temos uma classe e desejamos que suas subclasses especifiquem os objetos que criam.
Estrutura: Product = a interface de objetos que o método fabrica (documento). (OBS: interface, no conceito de Design Patterns, significa um modelo bem definido de uma abstração, podendo ser uma classe abstrata ou a própria interface do Java)
ConcreteProduct = a implementação da interface de produtos (meu documento).
Creator = a declaração do método fábrica, que retorna um objeto do tipo Product (aplicação).
*
*
FACTORY METHOD
Suponha que você deve trabalhar em um projeto computacional com um conjunto de carros, cada um de uma determinada fábrica. Para exemplificar suponha os quatro seguintes modelos/fabricantes:
Palio – Fiat
Gol – Volkswagen
Celta – Chevrolet
Fiesta – Ford
Será necessário manipular este conjunto de carros em diversas operações, como poderíamos modelar este problema?
Uma primeira solução, mais simples, seria criar uma classe para representar cada carro, no entanto ficaria muito difícil prever as classes ou escrever vários métodos iguais para tratar cada um dos tipos de objetos.
Poderíamos então criar uma classe base para todos os carros e especializá-la em subclasses que representem cada tipo de carro, assim, uma vez definida uma interface comum poderíamos tratar todos os carros da mesma maneira. O problema surge quando vamos criar o objeto, pois, de alguma forma, precisamos identificar qual objetos queremos criar. Ou seja, precisaríamos criar uma enumeração para identificar cada um dos carros e, ao criar um carro, identificaríamos seguindo essa enumeração
*
*
FACTORY METHOD
O padrão Factory Method possui a seguinte intenção:
“Definir uma interface para criar um objeto, mas deixar as subclasses decidirem que classe instanciar. O Factory Method permite adiar a instanciação para subclasses.”
Ou seja, ao invés de criar objetos diretamente em uma classe concreta, nós definimos uma interface de criação de objetos e cada subclasse fica responsável por criar seus objetos. Seria como se, ao invés de ter uma fábrica de carros, nós tivéssemos uma fábrica da Fiat, que cria o carro da Fiat, uma fábrica da Ford, que cria o carro da Ford e etc.
*
*
FACTORY METHOD
*
*
FACTORY METHOD
A principal vantagem em utilizar o padrão Factory Method é a extrema facilidade que temos para incluir novos produtos. Não é necessário alterar NENHUM código, apenas precisamos criar o produto e a sua fábrica. Todo o código já escrito não será alterado.
No entanto isto tem um custo. Perceba que criamos uma estrutura relativamente grande para resolver o pequeno problema, temos um conjunto grande de pequenas classes, cada uma realizando uma operação simples. Apesar de seguir o princípio da responsabilidade única, para cada novo produto precisamos sempre criar duas classes, uma produto e uma fábrica.
*
*
FACTORY METHOD
Vantagens:
Encapsulamento + Desacoplamento: Esconde a regra de negócio da criação de objetos, provendo desacoplamento.
Flexibilidade:
Mudar a sub classe concreta que cria o objeto permite mudar a classe do objeto criado sem que o cliente tenha o conhecimento. 
Desvantagens:
Manutenção: Sempre que a classe mudar os critérios de seleção, o objeto de todas as aplicações que usam a hierarquia de classes deverão ser submetidos a uma mudança correspondente.
Flexibilidade e Manutenção: Pois como não pode ser parametrizado, qualquer alteração no processo de criação pode se tornar complexa de se alterar, já que ele também não é flexível.
*

Teste o Premium para desbloquear

Aproveite todos os benefícios por 3 dias sem pagar! 😉
Já tem cadastro?

Outros materiais