제이온

[Effective Java] Item 2. Pertimbangkan Builder Jika Konstruktor Memiliki Banyak Parameter

  • Bahasa Penulisan: Bahasa Korea
  • Negara Standar: Semua Negaracountry-flag
  • TI

Dibuat: 2024-04-27

Dibuat: 2024-04-27 00:46

Pola Pembangun Bertahap (Incremental Builder Pattern)

Baik pabrik statis maupun konstruktor memiliki kesulitan dalam menangani parameter yang banyak. Misalnya, jika suatu kelas memiliki 6 field dan ingin membuat konstruktor untuk 2 parameter, 3 parameter, dan seterusnya, pola pembangun bertahap dapat digunakan seperti di bawah ini.



Namun, bahkan dengan cara ini, jika parameternya banyak, akan sulit memahami arti dari masing-masing nilai saat membaca kode, dan dapat terjadi kesalahan memasukkan nilai karena parameter dengan tipe yang sama.


Pola Java Beans

Pola Java Beans membuat objek dengan konstruktor tanpa parameter, kemudian memanggil metode setter untuk mengatur nilai parameter yang diinginkan.



Pola Java Beans memungkinkan pembuatan instance tanpa kebingungan nilai meskipun parameternya banyak. Namun, untuk membuat satu objek, perlu memanggil beberapa metode setter, dan konsistensi akan terganggu sampai objek selesai dibuat. Karena alasan ini, kelas tidak dapat dibuat immutable.


Pola Builder

Pola Builder umumnya digunakan karena menggabungkan keandalan pola pembangun bertahap dan keterbacaan pola Java Beans.

Alih-alih membuat objek secara langsung, klien memanggil konstruktor dengan hanya parameter wajib untuk mendapatkan objek builder. Kemudian, klien mengatur parameter opsional yang diinginkan menggunakan metode setter yang disediakan oleh objek builder. Terakhir, klien memanggil metode build() tanpa parameter untuk mendapatkan objek yang diinginkan.



Kelas Builder memiliki konstruktor yang hanya menerima parameter wajib, dan parameter opsional lainnya diisi menggunakan metode setter. Terakhir, objek NutritionFactsWithBuilderPattern yang telah selesai dibuat dibuat menggunakan metode build(). Kelas NutritionFactsWithBuilderPattern bersifat immutable, dan metode setter dari builder mengembalikan builder itu sendiri sehingga dapat dipanggil secara berantai. Cara ini disebut Fluent API atau Method Chaining.



Dari sudut pandang klien, pola builder memungkinkan penulisan dan pembacaan kode dengan mudah.


Pola Builder Cocok dengan Kelas yang Dirancang Secara Hirarkis


Kelas Pizza.Builder adalah tipe generik yang menggunakan pembatasan tipe rekursif, dan menambahkan metode abstrak self() untuk mendukung method chaining tanpa konversi tipe pada subclass. Pada subclass, cukup mengembalikan nilai dari metode abstrak ini ke dirinya sendiri.

Sekarang, mari kita lihat Pizza New York dan Pizza Calzone, yang merupakan subclass dari Pizza, untuk merasakan fleksibilitas pola Builder.



Metode build() yang didefinisikan oleh masing-masing builder subclass mengembalikan subclass konkret. Fungsi di mana metode subclass mengembalikan tipe yang bukan tipe yang dikembalikan oleh metode superclass, tetapi tipe turunannya, disebut Covariant Return Typing. Dengan fungsi ini, klien tidak perlu melakukan konversi tipe.



Klien dapat menggunakan enum dari Pizza dan masing-masing subclass secara bersamaan, dan dapat menyelesaikan pembuatan objek dengan metode yang sesuai untuk masing-masing objek.


Kekurangan Pola Builder

  • Objek builder harus dibuat.
  • Kode menjadi lebih panjang.


Ringkasan

Jika konstruktor atau metode pabrik statis harus menangani banyak parameter, pertimbangkan untuk menggunakan pola builder.


Sumber

  • Effective Java

Komentar0