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.

Image of Timescale

🚀 pgai Vectorizer: SQLAlchemy and LiteLLM Make Vector Search Simple

We built pgai Vectorizer to simplify embedding management for AI applications—without needing a separate database or complex infrastructure. Since launch, developers have created over 3,000 vectorizers on Timescale Cloud, with many more self-hosted.

Read full post →

Top comments (0)

Postmark Image

Speedy emails, satisfied customers

Are delayed transactional emails costing you user satisfaction? Postmark delivers your emails almost instantly, keeping your customers happy and connected.

Sign up