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.

Billboard image

The Next Generation Developer Platform

Coherence is the first Platform-as-a-Service you can control. Unlike "black-box" platforms that are opinionated about the infra you can deploy, Coherence is powered by CNC, the open-source IaC framework, which offers limitless customization.

Learn more

Top comments (0)

AWS Security LIVE!

Join us for AWS Security LIVE!

Discover the future of cloud security. Tune in live for trends, tips, and solutions from AWS and AWS Partners.

Learn More

👋 Kindness is contagious

Please leave a ❤️ or a friendly comment on this post if you found it helpful!

Okay