🧱Builder Pattern – Overview

🧠 Concept

The Builder Pattern lets you construct complex objects step by step. It separates the construction process from the final representation, so the same process can create different representations.

πŸ’‘ Think of it as assembling a burger, a car, or a dialog box β€” piece by piece.


🧱 Key Roles

Role
Description

Builder

Declares the steps to build the product.

ConcreteBuilder

Implements the building steps for a specific product.

Product

The final object being built.

Director

Controls the construction order.

Client

Tells the Director what type of product to build.


πŸ’» Java Example – UI Dialog Builder

// ----- Product -----
class Dialog {
    private String title;
    private String message;
    private String okButton;
    private String cancelButton;

    public void setTitle(String title) { this.title = title; }
    public void setMessage(String message) { this.message = message; }
    public void setOkButton(String okButton) { this.okButton = okButton; }
    public void setCancelButton(String cancelButton) { this.cancelButton = cancelButton; }

    public void show() {
        System.out.println("Dialog: " + title);
        System.out.println("Message: " + message);
        System.out.println("[ " + okButton + " ] [ " + cancelButton + " ]");
    }
}

// ----- Builder Interface -----
interface DialogBuilder {
    void buildTitle(String title);
    void buildMessage(String message);
    void buildOkButton(String text);
    void buildCancelButton(String text);
    Dialog getDialog();
}

// ----- Concrete Builder -----
class AlertDialogBuilder implements DialogBuilder {
    private Dialog dialog = new Dialog();

    public void buildTitle(String title) { dialog.setTitle(title); }
    public void buildMessage(String message) { dialog.setMessage(message); }
    public void buildOkButton(String text) { dialog.setOkButton(text); }
    public void buildCancelButton(String text) { dialog.setCancelButton(text); }
    public Dialog getDialog() { return dialog; }
}

// ----- Director -----
class DialogDirector {
    private DialogBuilder builder;

    public DialogDirector(DialogBuilder builder) { this.builder = builder; }

    public Dialog constructWarningDialog() {
        builder.buildTitle("Warning");
        builder.buildMessage("Unsaved changes will be lost!");
        builder.buildOkButton("Continue");
        builder.buildCancelButton("Cancel");
        return builder.getDialog();
    }
}

βœ… Usage Example:

Output:


🧠 Flow Summary

Step
Action
Result

1️⃣

DialogDirector calls builder steps

Sets title, message, buttons

2️⃣

AlertDialogBuilder builds each part

Creates Dialog object

3️⃣

Dialog returned and displayed

Fully assembled dialog


πŸͺœ Summary

  • Builds complex objects step by step.

  • Same construction process can create different variations (e.g., AlertDialog, InfoDialog).

  • Director controls how it’s built, Builder controls what each part looks like.

  • Useful when object creation involves many optional parameters or configurations.


🧾 Real-world Analogy

πŸ” Burger Builder

  • Builder = Chef

  • Director = Customer who says β€œI want a double cheeseburger.”

  • Product = Finished burger

Same β€œbuild process,” but different ingredients create different results.


🧭 TL;DR

Builder Pattern = Step-by-step construction of complex objects. Separates how to build from what to build, promoting flexibility and reusability. It's like a customizable constructor

Last updated