Leitores como você ajudam a apoiar o MUO. Quando você faz uma compra usando links em nosso site, podemos ganhar uma comissão de afiliado. Consulte Mais informação.

O padrão de projeto Builder encapsula as propriedades de um objeto e permite que você construa uma representação dele. Este padrão permite construir objetos complexos, com propriedades diferentes, embora pertençam à mesma classe.

Uma classe de objeto típica contém atributos, construtores e métodos. O padrão construtor permite extrair a lógica de construção da classe de objeto e colocá-la em classes chamadas construtores. Você pode usar essas classes construtoras para criar diferentes variações do mesmo objeto.

Implementando o Padrão Builder em Java

Um bom exemplo do padrão construtor é um sistema de pedidos de pizza que permite aos clientes selecionar diferentes opções de cobertura.

A classe do produto

Uma abordagem é tornar o construtor uma interface, mas primeiro você precisará criar uma classe de produto. O produto neste aplicativo de exemplo é uma pizza.

instagram viewer
públicoaulapizza{
// propriedades
privadoint número do pedido;
privado Corda massa de pizza;
privado Corda cobertura;

// getters e setters
públicointgetOrderNumber(){
retornar número do pedido;
}

públicovaziosetOrderNumber(int número do pedido){
esse.orderNumber = orderNumber;
}

público Corda getPizzaDough(){
retornar massa de pizza;
}

públicovaziosetPizzaDough(Cordão massa de pizza){
esse.pizzaDough = pizzaDough;
}

público Corda getTopping(){
retornar cobertura;
}

públicovaziosetTopping(cobertura de corda){
esse.topping = cobertura;
}
}

A Classe do Construtor

a pizza classe Java tem três propriedades e seus respectivos getters e setters, mas não há métodos construtores. A interface do construtor permitirá que você crie cada aspecto do objeto pizza separadamente. Isso permitirá que você recupere todo o objeto pizza.

públicointerfaceConstrutor{
públicovaziocriarPizzaDough();
públicovaziocriarTopping();
público pizza pegarPizza();
}

O aplicativo de amostra de pizza permite que os clientes peçam qualquer cobertura, como queijo, calabresa, cebola ou combinações diferentes. Portanto, uma pizza que um cliente pedirá é queijo.

públicoaulaCheesePizzaBuilderimplementosConstrutor{
privado Pizza de pizza;

públicoCheesePizzaBuilder(){
esse.pizza = novo Pizza();
}

@Sobrepor
públicovaziocriarPizzaDough(){
esse.pizza.setPizzaDough("Massa");
}

@Sobrepor
públicovaziocriarTopping(){
esse.pizza.setTopping("Queijo");
}

@Sobrepor
público pizza pegarPizza(){
retornaresse.pizza;
}
}

A classe CheesePizzaBuilder implementa a interface Builder e a utiliza para criar uma nova pizza de queijo. Esta é uma representação do objeto Pizza. Ele também faz isso de forma independente da classe Pizza.

A classe CheesePizzaBuilder não sabe muito sobre a classe Pizza, ela apenas sabe o que precisa saber para completar sua função. Ele sabe que a classe Pizza tem uma massa e uma propriedade de cobertura e define essas propriedades como dois valores específicos que toda pizza de queijo terá. Agora, toda vez que o aplicativo chamar a classe CheesePizzaBuilder, ele criará uma nova Pizza com cobertura de queijo.

A classe do diretor

A classe director é um aspecto crucial do padrão builder. O único propósito de uma classe construtora concreta é criar um objeto específico. Ele consegue isso criando as diferentes partes de um objeto separadamente.

No entanto, as classes concretas construtoras desconhecem o algoritmo. Nenhuma das classes de construtor sabe construir a massa antes de adicionar a cobertura. Esta é a função da classe director.

públicoaulaDiretor{
privado Construtor pizzaBuilder;

públicoDiretor(Construtor PizzaConstrutor){
esse.pizzaBuilder = pizzaBuilder;
}

público pizza pegarPizza(){
retornaresse.pizzaBuilder.getPizza();
}

públicovaziofazerPizza(){
esse.pizzaBuilder.createPizzaDough();
esse.pizzaBuilder.createTopping();
}
}

A classe Director usa a interface do construtor para fazer pizzas. É o guardião do algoritmo.

As vantagens de usar o padrão de projeto Builder

A principal vantagem de usar o padrão de design do construtor é sua propriedade de encapsulamento. Este é um aspecto crucial da engenharia de software, pois auxilia no desenvolvimento de aplicativos seguros.

Outra vantagem desse padrão de projeto é sua abordagem de construção de objetos. Ele permite criar processos de várias etapas, onde cada etapa é independente, o que facilita a depuração.