quarta-feira, 30 de maio de 2012

Builder Pattern



Nome e Classificação do Padrão

Builder – Padrão de criação



Intenção e objetivo

Possui o objetivo de reduzir a complexidade de uma classe movendo a lógica de construção de uma classe para um objeto externo separando a construção deste objeto com a sua respectiva representação produzindo diferentes representações.
Criar passo a passo objetos mais complexos



Motivação

Este padrão de criação traz a possibilidade de separar da classe os seus métodos numa outra estrutura de dados da mesma forma que possibilita também a utilização dessa estrutura para coletar as opções de um cliente e construir objetos diferentes, através somente dos parâmetros necessários para este desenvolvimento.
Apenas conhecendo os atributos da classe em questão pode instanciar objetos diferentes baseado nos métodos de criação e comportamento de uma classe



Aplicabilidade

Deve permitir diferentes representações para o objeto que é construído
É aplicavel para simplificar um algoritmo complexo, deve ser independente das partes que compõem o objeto e de como elas são.



Estrutura





Participantes 


Builder
Interface abstrata utilizada para criação de objetos no caso podem ser produtos.
Concrete Builder
Realiza a implementação do Builder. É um objeto que construi outros objetos.
Director
A classe Director é responsável pela manutenção da sequencia correta de criação do objeto, recebe a classe Concrete Builder como paramentro e realiza as operações necessárias.
Product
O objeto final que é criado pelo Diretor usando a classe Builder




Colaborações

O usuário cria o objeto Director e o configura com o objeto Builder desejado
Director notifica o construtor sempre que uma parte do produto deve ser construída ou convertida
Builder trata solicitações do diretor e acrescenta partes ao produto
O cliente recupera o produto do construtor


Consequencia

Vantagens [Metsker, 2004]: 
Redução da extensão e da complexidade de uma classe;
Independência entre a representação de um objeto e a sua construção;
Criação de regras graduais de construção para um objeto;
Geração de construções diversificadas de um tipo de objeto, ou de construções de objetos diversificados entre si, a partir de um construtor-base; 
Desvantagem
Por ser bastante flexível, este padrão só apresentará desvantagem se o seu construtor-base for mal planejado, o que poderia resultar em construções redundantes ou com baixo aproveitamento operacional.



Implementação

Processo de produção de uma pizza
Normalmente em pizzarias o processo de fabricação possui três parâmetros específicos a massa, o molho e a cobertura
A classe PizzaBuilder penas disponibiliza constantes que são utilizadas de maneira recorrente na aplicação, de maneira que podem ser acessadas pelas classes que a implementam.
As classes dos tipos de pizza realizam a implementação do Builder.
A classe Garconete é responsável pela manutenção da sequencia correta de criação do objeto, recebe o pedido como parametro e realiza as operações necessárias.
A classe pizza é o objeto final que é criado pela classe Garconete usando a classe PizzaBuilder






Exemplos de Código


Link do projeto com o padrão Builder
http://www.4shared.com/zip/bCoRDsGr/PizzaBuilder.html
Link do projeto sem o padrão Builder
http://www.4shared.com/zip/6E5Hn9T9/Projeto_PizzaBuider_sem_o_patt.html





Usos Conhecidos

Construção de árvores de análise sintática
Classes que funcionam ao mesmo tempo como Builder e
Director para criar sub-classes delas mesmas




Padrões relacionados

Abstract Factory
Composite