Padrão de Projeto Builder
Padrão de Criação
Builder
O problema é que precisamos modelar um sistema de venda de carros para uma concessionária. Queremos que o sistema seja flexível, para adição de novos carros, e de fácil manutenção
Proposta do Padrão: “Separar a construção de um objeto complexo de sua representação de modo que o mesmo processo de construção possa criar diferentes representações.”
No padrão Builder temos também uma interface comum para todos os objetos que constroem outros objetos. Essa interface Builder define todos os passos necessários para construir um objeto
public class CarroProduct { double preco;
String dscMotor; int anoDeFabricacao;
String modelo;
String montadora;
}
A classe Builder vai possuir um método para construir cada um dos dados do nosso Produto: public abstract class CarroBuilder {
protected CarroProduct carro; public CarroBuilder() { carro = new CarroProduct();
}
public abstract void buildPreco(); public abstract void buildDscMotor();
public abstract void buildAnoDeFabricacao(); public abstract void buildModelo(); public abstract void buildMontadora(); public CarroProduct getCarro() { return carro;
}
}
Nesta classe temos o carro que será construído, os passos para sua construção e um método que devolve o carro construído
public class FiatBuilder extends CarroBuilder {
@Override
public void buildPreco() {
// Operação complexa. carro.preco = 25000.00;
}
@Override public void buildDscMotor() {
// Operação complexa. carro.dscMotor = "Fire Flex 1.0";
}
@Override public void buildAnoDeFabricacao() {
// Operação complexa. carro.anoDeFabricacao = 2011;
}
@Override public void buildModelo() {
// Operação complexa. carro.modelo = "Palio";
}
@Override public void buildMontadora() {
// Operação complexa. carro.montadora = "Fiat";
}
Essa classe utiliza a estrutura do Builder para definir o algoritmo de construção do Produto.