0Pricing
Java Academy · Lesson

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

  1. Singleton: Thread-Safe Implementations
  2. Factory Method Pattern
  3. Abstract Factory for Product Families
  4. Builder Pattern with Fluent API
← Back to Java Academy