วัตถุประสงค์ของการเขียนโปรแกรมในรูปแบบ builder คือเพื่อรองรับการสร้างออบเจกต์ที่ต้องการองค์ประกอบของพารามิเตอร์ที่แตกต่างกัน โดยปรกติเราสร้างออบเจกต์ด้วยการเรียกใช้เมธอดคอนสตรัคเตอร์และส่งผ่านพารามิเตอร์ตามที่เมธอดคอนสตรัคเตอร์ต้องการ ในกรณีที่การใช้งานก่อให้เกิดการส่งพารามิเตอร์หลากหลายแบบ เราจะต้องสร้างเมธอดคอนสตรัคเตอร์เพิ่มขึ้นมาเพื่อรองรับ สุดท้ายเราจะมีเมธอดคอนสตรัคเตอร์จำนวนมาก เราจึงใช้การเขียนโปรแกรมในรูปแบบ builder เพื่อรองรับความต้องการแบบนี้

วิธีการคือคลาสที่เราสร้างจะมีคลาสที่เป็น builder อยู่ข้างในซึ่งจะคอยจัดการพารามิเตอร์และสร้างออบเจกต์ตามพารามิเตอร์ที่ส่งมา จากตัวอย่างด้านล่างเป็นการสั่งพิซซ่าที่มีส่วนประกอบแตกต่างกัน

class Pizza { // ประกาศคลาส Pizza
    private String chicken; //กำหนดฟิลด์เป็นแบบ private เพื่อใช้งานผ่านตัว builder
    private String beef;
    private String originalSauce;
    private String seafoodSauce;

    private Pizza(String chicken, String beef, 
                  String originalSauce, String seafoodSauce) { 
        // สังเกตุว่าเราจะมีเพียงคอนสตรัตเตอร์เดียวเท่านั้น และกำหนดเป็นแบบ private เพื่อใช้งานผ่านตัว builder
        this.chicken = chicken;
        this.beef = beef;
        this.originalSauce = originalSauce;
        this.seafoodSauce = seafoodSauce;
    }

    @Override
    public String toString() { // เอาไว้แสดงผล
        String str = "Your pizza have";
        if (chicken != null) {
            str += " "+chicken;
        }
        if (beef != null) {
            str += " "+beef;
        }
        if (originalSauce != null) {
            str += " "+originalSauce;
        }
        if (seafoodSauce != null) {
            str += " "+seafoodSauce;
        }
        str +=".";

        return str;
    }

    static class Builder { 
        //สร้างตัว builder ซึ่งจะมีพารามิเตอร์แบบเดียวกับคลาส Pizza 
        //เพื่อให้ตัว builder ช่วยจัดการเรื่องการพารามิเตอร์ให้กับมเธอดคอนสตรัคเตอร์
        private String chicken; //กำหนดฟิลด์เป็นแบบ private เพื่อใช้งานเมธอดเท่านั้น
        private String beef;
        private String originalSauce;
        private String seafoodSauce;

        Builder() {}

        Builder setChicken(String chicken) {
            this.chicken = chicken;
            return this;
        }

        Builder setBeef(String beef) {
            this.beef = beef;
            return this;
        }

        Builder setOriginalSauce(String originalSauce) {
            this.originalSauce = originalSauce;
            return this;
        }

        Builder setSeafoodSauce(String seafoodSauce) {
            this.seafoodSauce = seafoodSauce;
            return this;
        }

        Pizza build() { 
            // เรียกใช้ builder ซึ่งจะไปเรียกเมธอดคอนสตรัคเตอร์อีกทีหนึ่ง โดยตัว builder จะจัดการ
            // พารามิเตอร์ให้ หากพารามิเตอร์ใดไม่มีก็จะส่งเป็น null เราจึงใช้เพียงเมธอดคอนสตรัคเตอร์เดียวได้ 
            return new Pizza(chicken, beef, originalSauce, seafoodSauce);
        }
    }
}

ในการเรียกใช้งาน เราจะสร้างออบเจกต์ผ่านตัว builder และกำหนดเฉพาะพารามิเตอร์ที่ต้องการดังตัวอย่างด้านล่าง

package com.company;

public class Main {
    public static void main(String[] args) {
        Pizza chickenPizza = new Pizza.Builder()
                .setChicken("chicken")
                .setOriginalSauce("original sauce")
                .build();
        System.out.println(chickenPizza);
        Pizza beefSeafoodSauce = new Pizza.Builder()
                .setBeef("beef")
                .setSeafoodSauce("seafood sauce")
                .build();
        System.out.println(beefSeafoodSauce);
    }
}

จากผลลัพธ์จะเห็นว่าเราได้พิซซ่าที่แตกต่างกันตามพารามิเตอร์ที่เลือก

Your pizza have chicken original sauce.
Your pizza have beef seafood sauce.