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.
Tantangan
MudahMari 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 classPizzayang menggunakan Builder Pattern untuk konstruksi. Pizza-mu harus memiliki field berikut:size(String): wajib, menunjukkan ukuran pizzacheese(boolean): opsional, nilai default-nya falsepepperoni(boolean): opsional, nilai default-nya falsemushrooms(boolean): opsional, nilai default-nya falseConstructor
Pizzaharus bersifat private dan hanya menerimaPizzaBuildersebagai 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 berisino toppings.Buat inner class static
PizzaBuilderdengan:- Constructor yang menerima parameter
sizeyang wajib diisi - Method
cheese(),pepperoni(), danmushrooms(), yang masing-masing mengatur boolean terkait menjadi true dan mengembalikanthisagar bisa dirangkai - Method
build()yang mengembalikan Pizza baru
- Constructor yang menerima parameter
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
PizzaBuilderdengan 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, panggilbuild()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
}
}
Pelajaran ini berisi kuis singkat. Mulai pelajarannya untuk menjawab kuis dan melacak progresmu.
Semua pelajaran di Pemrograman Berorientasi Objek
1Dasar-Dasar OOP
File EksternalPengantar OOPClass dan ObjectKata Kunci thisMethodField (Atribut)Method KonstruktorOverloading KonstruktorRangkuman: Kalkulator Sederhana4Pewarisan
Pewarisan Dasar (extends)Kata Kunci superMethod Overriding (@Override)Rantai KonstruktorKelas ObjectPewarisan Tunggal dan BertingkatMengapa Tidak Ada Pewarisan Multi-KelasRangkuman: Hierarki Karyawan7method Khusus & class Object
method toString()equals() dan hashCode()method clone()compareTo() dan ComparableAntarmuka ComparatorUlasan: Pengurutan Kustom10Penanganan Exception dalam OOP
Hierarki class ExceptionException KustomError Checked vs UncheckedPola Try-with-ResourcesRekap: Pengguna Tervalidasi2Modifier Akses & Enkapsulasi
Ikhtisar Tingkat AksesMethod Getter dan SetterPenyembunyian InformasiKata Kunci finalUlasan: Pengelola Rekening Bank5Polimorfisme
Dasar method overloadingMethod overriding (Saat program berjalan)Upcasting dan downcastingOperator instanceofclass dan method abstrakUlasan: Kalkulator Bentuk8Konsep OOP Lanjutan
Komposisi vs PewarisanAgregasi vs Komposisiinner, nested, dan anonymous classEnum dan method Enumrecord (Java 16+)sealed class (Java 17+)11Pola Desain Bagian 1
Pengantar Pola DesainPola SingletonPola FactoryPola BuilderPola ObserverPola Strategy3property class dan Anggota Statis
Variabel Instance vs Statismethod StatisBlok StatisKonstanta (static final)Rangkuman: Penghitung dan Utilitas6Antarmuka & Kelas Abstrak
Pengantar AntarmukaMengimplementasikan AntarmukaImplementasi Beberapa AntarmukaDefault & Static pada AntarmukaKelas Abstrak vs AntarmukaAntarmuka FungsionalRekap: Sistem PembayaranLatihan sendiri: Compiler Java online