Builder Pattern with Fluent API
Construct complex objects step-by-step with a fluent builder to avoid telescoping constructors.
The Telescoping Constructor Problem
When a class has many optional parameters, constructors multiply: 2-param, 3-param, 4-param... The Builder pattern solves this with a fluent step-by-step configuration API.
// Without builder — hard to read:
Pizza p = new Pizza("large", "thin", true, false, true, false, "mozzarella");Basic Builder Structure
Create a static nested Builder class. The outer class has a private constructor that accepts the builder. Each setter in the builder returns this for fluent chaining.
public final class Pizza {
private final String size, crustType, cheese;
private final boolean extraSauce, pepperoni;
private Pizza(Builder b) {
this.size = b.size; this.crustType = b.crustType;
this.cheese = b.cheese; this.extraSauce = b.extraSauce;
this.pepperoni = b.pepperoni;
}
public static class Builder {
private final String size;
private String crustType = "regular", cheese = "mozzarella";
private boolean extraSauce, pepperoni;
public Builder(String size) { this.size = size; }
public Builder crustType(String c) { this.crustType = c; return this; }
public Builder cheese(String c) { this.cheese = c; return this; }
public Builder extraSauce() { this.extraSauce = true; return this; }
public Builder pepperoni() { this.pepperoni = true; return this; }
public Pizza build() { return new Pizza(this); }
}
}All lessons in this course
- Singleton: Thread-Safe Implementations
- Factory Method Pattern
- Abstract Factory for Product Families
- Builder Pattern with Fluent API