Menu
CoddyTech

Pola Builder

Termasuk bagian Pemrograman Berorientasi Objek dalam perjalanan Java di Coddy. Pelajaran 67 dari 87.

Builder Pattern adalah pola desain kreasi yang mengatasi masalah umum: membuat object kompleks dengan banyak parameter opsional. Alih-alih membuat beberapa constructor atau meneruskan null untuk parameter yang tidak digunakan, Builder memungkinkan kamu membuat object secara bertahap.

Pertimbangkan untuk membuat object User dengan field wajib (name, email) dan field opsional (age, phone, address). Tanpa Builder, kamu perlu menggunakan constructor bertingkat atau constructor berantakan dengan banyak parameter. Pola Builder menawarkan pendekatan yang lebih rapi:

public class User {
    private final String name;    // wajib
    private final String email;   // wajib
    private final int age;        // opsional
    private final String phone;   // opsional
    
    private User(UserBuilder builder) {
        this.name = builder.name;
        this.email = builder.email;
        this.age = builder.age;
        this.phone = builder.phone;
    }
    
    public static class UserBuilder {
        private final String name;
        private final String email;
        private int age;
        private String phone;
        
        public UserBuilder(String name, String email) {
            this.name = name;
            this.email = email;
        }
        
        public UserBuilder age(int age) {
            this.age = age;
            return this;
        }
        
        public UserBuilder phone(String phone) {
            this.phone = phone;
            return this;
        }
        
        public User build() {
            return new User(this);
        }
    }
}

Method milik Builder mengembalikan this, sehingga memungkinkan method chaining: cara yang lancar dan mudah dibaca untuk membuat object:

User user = new User.UserBuilder("Alice", "alice@email.com")
    .age(25)
    .phone("555-1234")
    .build();

Perhatikan bahwa konstruktor User bersifat privat: object hanya dapat dibuat melalui Builder. Pola ini sangat berguna saat object memiliki banyak field opsional, sehingga kodemu lebih mudah dibaca dan lebih minim kesalahan daripada daftar parameter yang panjang.

challenge icon

Tantangan

Mudah

Mari buat sistem pemesanan pizza menggunakan Builder Pattern! Daripada menangani constructor yang menerima puluhan parameter untuk semua kemungkinan topping dan opsi, kamu akan membuat builder yang fleksibel agar kustomisasi pizza menjadi rapi dan mudah dibaca.

Kamu akan menyusun kodemu dalam dua file:

  • Pizza.java: Buat class Pizza yang menggunakan Builder Pattern untuk konstruksi. Pizza-mu harus memiliki field berikut:

    size (String): wajib, menunjukkan ukuran pizza

    cheese (boolean): opsional, nilai default-nya false

    pepperoni (boolean): opsional, nilai default-nya false

    mushrooms (boolean): opsional, nilai default-nya false

    Constructor Pizza harus bersifat private dan hanya menerima PizzaBuilder sebagai parameternya, lalu menyalin semua nilai dari builder ke field pizza.

    Sertakan method getDescription() yang mengembalikan string dengan format ini: [size] Pizza with: [toppings], dengan toppings berupa daftar topping yang bernilai true, dipisahkan dengan koma (Cheese, Pepperoni, Mushrooms). Jika tidak ada topping yang dipilih, bagian toppings cukup berisi no toppings.

    Buat inner class static PizzaBuilder dengan:

    • Constructor yang menerima parameter size yang wajib diisi
    • Method cheese(), pepperoni(), dan mushrooms(), yang masing-masing mengatur boolean terkait menjadi true dan mengembalikan this agar bisa dirangkai
    • Method build() yang mengembalikan Pizza baru
  • Main.java: Tunjukkan cara kerja pizza builder-mu! Kamu akan menerima empat input: ukuran pizza (String), dan tiga nilai yes/no (String) yang menunjukkan apakah cheese, pepperoni, dan mushrooms akan ditambahkan.

    Buat PizzaBuilder dengan ukuran yang diberikan. Lalu, berdasarkan setiap input yes/no, rangkai method topping yang sesuai. Jika input-nya "yes", panggil method topping tersebut; jika "no", lewati. Terakhir, panggil build() untuk membuat pizza-mu.

    Cetak hasil pemanggilan getDescription() pada pizza yang sudah selesai dibuat.

Kamu akan menerima empat input secara berurutan: size (String), tambah cheese (String: "yes" atau "no"), tambah pepperoni (String: "yes" atau "no"), tambah mushrooms (String: "yes" atau "no").

Contohnya, dengan input Large, yes, no, yes, output-mu adalah: Large Pizza with: Cheese, Mushrooms

Perhatikan bahwa Builder Pattern memungkinkan kamu membuat pizza dengan kombinasi topping apa pun tanpa perlu constructor terpisah untuk setiap kemungkinan!

Coba sendiri

import java.util.Scanner;

class Main {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        
        // Baca input
        String size = scanner.nextLine();
        String addCheese = scanner.nextLine();
        String addPepperoni = scanner.nextLine();
        String addMushrooms = scanner.nextLine();
        
        // TODO: Buat PizzaBuilder dengan ukuran yang diberikan
        // TODO: Rangkai method untuk menambahkan topping berdasarkan input yes/no
        // TODO: Buat pizza dan cetak deskripsinya
        
    }
}
quiz iconUji dirimu

Pelajaran ini berisi kuis singkat. Mulai pelajarannya untuk menjawab kuis dan melacak progresmu.

Semua pelajaran di Pemrograman Berorientasi Objek

Latihan sendiri: Compiler Java online