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:
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:
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:
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:
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:
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.