DEV Community

Camila Ferreira
Camila Ferreira

Posted on

Padrões de projeto: Builder

O padrão de projeto Builder é um padrão criacional que visa abstrair o processo de instânciação de objetos, tornando o sistema independente da forma como os objetos são criados. Ele permite a construção de objetos complexos de maneira incremental, passo a passo, o que é particularmente útil quando um objeto precisa ser montado em várias etapas ou quando as informações necessárias para sua construção são fornecidas em fases distintas.

Entre suas características principais, podemos destacar:

Separação de construção e representação: O padrão Builder separa a lógica de construção de um objeto de sua representação final, permitindo que a construção seja feita de forma flexível e modular.

Facilidade de configuração: Ao utilizar o Builder, é possível criar objetos com diferentes configurações sem a necessidade de mudar o código cliente. Isso proporciona maior flexibilidade no processo de criação.

Imutabilidade do objeto final: O objeto resultante da construção é geralmente imutável, ou seja, não pode ser alterado após sua criação. Isso evita modificações indesejadas e garante a integridade do objeto.

Para ilustrar o funcionamento do padrão, imagine a criação de um Produto com diversos atributos, como preço, título, descrição e categoria. Usando o padrão Builder, podemos construir o produto de forma flexível, especificando os diferentes atributos em etapas:

`
public class Produto {
private Double preco;
private String titulo;
private String descricao;
private String categoria;

private Produto(Builder builder) { this.preco = builder.preco; this.titulo = builder.titulo; this.descricao = builder.descricao; this.categoria = builder.categoria; } public static class Builder { private Double preco; private String titulo; private String descricao; private String categoria; public Builder setPreco(Double preco) { this.preco = preco; return this; } public Builder setTitulo(String titulo) { this.titulo = titulo; return this; } public Builder setDescricao(String descricao) { this.descricao = descricao; return this; } public Builder setCategoria(String categoria) { this.categoria = categoria; return this; } public Produto build() { return new Produto(this); } } 
Enter fullscreen mode Exit fullscreen mode

}

public class Principal {

public static void main(String[] args) { Produto produto = new Produto.Builder() .setPreco(999.9) .setTitulo("Smartphone") .setCategoria("Celulares") .setDescricao("Um celular Android") .build(); } 
Enter fullscreen mode Exit fullscreen mode

}

`

Neste exemplo, o Produto é criado utilizando um ProdutoBuilder, permitindo a configuração dos atributos de forma incremental e modular. O uso do padrão Builder torna o processo mais legível e organizado.

Vantagens do Padrão Builder:
Desacoplamento: O cliente não precisa saber como os objetos são criados, apenas interage com a interface do Builder, o que aumenta a flexibilidade e a coesão do sistema.
Flexibilidade: O Builder permite criar diferentes representações de um objeto de forma fácil e controlada, sem a necessidade de modificar a lógica de construção do objeto.
Manutenção: Como a construção do objeto é separada da sua representação, o código se torna mais modular e fácil de manter.
Esse padrão contribui significativamente para a legibilidade e a escalabilidade do código, especialmente quando se trabalha com objetos complexos que exigem diferentes configurações.

Top comments (0)