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)