DevTurtle logo DevTurtle

Lombok @Builder – Il pattern builder con le annotation in java

Lombok è una libreria Java che semplifica notevolmente la scrittura di codice, riducendo il boilerplate tramite l'uso di annotazioni. Tra le sue numerose funzionalità, l'annotazione @Builder è una delle più apprezzate per la sua capacità di usare il pattern omonimo in modo semplice e intuitivo. Questo articolo esplorerà in dettaglio le potenzialità di del pattern builder, spiegando come utilizzarlo e i suoi vantaggi.

Abbiamo già visto in un precedente articolo un esempio semplice di come usare Lombok con Maven ed IntelliJ pertanto partiremo da quanto già realizzato.

Il pattern builder

Il pattern Builder è uno dei design pattern creazionali più utilizzati nel mondo della programmazione orientata agli oggetti. Introdotto da Gang of Four (GoF) nel loro libro “Design Patterns: Elements of Reusable Object-Oriented Software”, questo pattern risolve problemi legati alla creazione di oggetti complessi, migliorando la leggibilità e la manutenibilità del codice.

Questo pattern separa la costruzione di un oggetto complesso dalla sua rappresentazione, permettendo di creare diverse rappresentazioni dello stesso tipo di oggetto. Questo è particolarmente utile quando una classe ha molti attributi opzionali o quando ci sono combinazioni complesse di parametri.

Il pattern builder permette di risolvere diversi problemi comuni nella programmazione:

  • Costruttori con molti parametri: Evita l’uso di costruttori con molti parametri, che possono essere difficili da leggere e mantenere.
  • Immutabilità: Facilita la creazione di oggetti immutabili, dove tutti i campi sono definiti solo una volta durante la costruzione dell’oggetto.
  • Costruzione condizionale: Permette di costruire oggetti in modo flessibile, aggiungendo solo i campi necessari in base a certe condizioni.

L’annotation @Builder in Lombok

@Builder sulla classe

Per utilizzare il pattern builder in Lombok è sufficiente annotare la classe che si vuole gestire come nell’esempio seguente:

Java
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Getter;

@Getter
@Builder
public class RgbColor {

    private int red;
    private int green;
    private int blue;

}

Abbiamo usato la stessa classe RgbColor che avevamo implementato nel tutorial precedente ma questa volta l’abbiamo annotata con @Builder al posto di @AllArgsConstructor.

A questo punto, per generare un’istanza è possibile usare il pattern builder come nell’esempio seguente:

Java
public class Main {

    public static void main (String[] args) {

        RgbColor color = RgbColor.builder()
                .red(30)
                .green(22)
                .blue(55)
                .build();

        System.out.println("red: " + color.getRed());
        System.out.println("gren: " + color.getGreen());
        System.out.println("blue: " + color.getBlue());

    }

}

@Builder su metodi

In alternativa all’esempio precedente, è possibile definire dei builder custom applicando l’annotazione @Builder su un metodo.

Nell’esempio seguente abbiamo definito un metodo per instanziare la classe RgbColor defaultizzando il colore blu:

Java
import lombok.Builder;
import lombok.Getter;

@Getter
public class RgbColorBuilders {

    @Builder(builderMethodName = "redGreenBuilder")
    public static RgbColor createColor(int red, int green) {
        return new RgbColor(red, green, 0);
    }

}

L’utilizzo del builder è analogo all’esempio precedente a meno del fatto che non sarà possibile modificare il valore della proprietà defaultizzata:

Java
public class Main {

    public static void main (String[] args) {

        RgbColor color = RgbColorBuilders.redGreenBuilder()
                .red(60)
                .green(30)
                .build();

        System.out.println("red: " + color.getRed());
        System.out.println("gren: " + color.getGreen());
        System.out.println("blue: " + color.getBlue());
        
    }

}

Potete scaricare il codice del tutorial dal seguente repository Git:

git icon
Git RepositoryDownload sorgente

L’annotazione @Builder di Lombok è uno strumento potente per semplificare la creazione di oggetti complessi e migliorare la leggibilità del codice. Con le sue diverse opzioni di personalizzazione e utilizzo, diventa una risorsa indispensabile per i programmatori Java che desiderano scrivere codice pulito ed efficiente.