quarta-feira, 8 de setembro de 2010

Factory Method (GoF - de criação)

O que é?
É uma fábrica de objetos.
Define uma interface para criar seus objetos.
Permite que as sub classes efetuem a instanciação.

Estrutura:


Problema:
Às vezes, um objeto de pedido só pode saber que ele precisa acessar uma classes dentro de uma hierarquia de classes, mas não sabemos exatamente qual a classes entre o conjunto de sub classes da classes pai deve ser selecionada. A escolha da classe apropriada pode depender de fatores tais como:
O estado do aplicativo em execução;
Definições de configurações do aplicativo;
Expansão dos requisitos ou acessórios;

Contexto:
Precisamos realizar uma consulta.
Cenário: Temos uma loja de carro e queremos fazer uma consulta por carro para saber seu preço.

Solução:
Nesses casos, um objeto do aplicativo deve implementar a seleção de classe, critérios para instanciar uma classe adequada da hierarquia para acessar seus serviços.

Vamos utilizar:
Uma interface;
Ex.: Carro, getPreco(); e todas as classes ex.: CarroOmega{}, CarroVectra{}, CarroGolf{}, irão implementar a interface carro informando seu preço correspondente.

A classe factory é onde vamos criar um método para criarmos um novo carro.

Ex.:
Se (preço == 10.000){
CarroOmega co = new CarroOmega();
} Senão se (preço == 20.000){
CarroVectra cv = new CarroVectra();
}

E assim respectivamente...

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.

Referências:
Head First – Design Patterns / Eric Freeman e Elisabeth
http://pt.wikipedia.org/wiki/Factory_Method

Nenhum comentário:

Postar um comentário

DÚVIDAS - CRITICAS - SUGESTÕES