Selama menulis pedoman kode untuk perusahaan saya menemukan diri saya merekomendasikan menggunakan pola Builder dari Java Efektif, bukan konstruktor teleskopik.
Namun, setelah memikirkannya sedikit lebih, pasti solusi yang lebih elegan adalah dengan hanya menghapus kelas pembangun dan juga menghapus konstruktor tambahan dengan argumen opsional.
Jadi hanya memiliki satu konstruktor dengan parameter yang diperlukan, getter / setter normal, dan komentar kode. Saat mengimplementasikan, buat saja instance objek baru, lalu tetapkan nilai.
Pemikiran orisinal saya adalah manfaat yang didapat dari menghilangkan kebingungan mengenai parameter apa yang opsional dan apa yang diperlukan; Namun manfaat sebenarnya berasal dari penggunaan metode chaining / antarmuka yang lancar.
Pola pembuat memiliki manfaat ketika Anda membuat banyak contoh baru karena ide dapat melakukan pekerjaan kaki dan juga jika ada banyak (15+) parameter opsional. Namun, apakah itu sepadan dengan waktu ekstra mengkodekan kelas batin statis, apakah Anda akan merekomendasikan menggunakan pembangun, atau apakah itu buang-buang waktu?
Jawaban:
Saya cenderung mengikuti pola yang konstruktor harus menyediakan semua nilai wajib yang diperlukan untuk membuat objek yang valid dan konsisten . Untuk nilai opsional, saya mencoba memikirkan tentang apa yang seharusnya menjadi standar paling umum, sehingga setingan digunakan sesedikit mungkin.
Jika saya menemukan bahwa ada banyak nilai opsional atau bahwa sebagian besar nilai opsional cenderung diubah dari standarnya, maka saya akan menggunakan pola pembangun (pembangun statis statis atau desain serupa lainnya).
Josh umumnya memberikan nasihat yang sangat bagus - hal terbaik yang saya sukai dari dia adalah bahwa saran itu berasal dari parit - dia mengakui bahwa dia membuat kesalahan dalam mendesain bagian Jawa, dan Java yang Efektif adalah bagian dari 'obat' nya sehingga untuk berbicara :-)
sumber
Pola Builder Josh Bloch, seperti Pola Builder GoF, menawarkan cara membuat objek yang tidak dapat diubah dengan banyak data default tanpa daftar panjang konstruktor yang dirantai.
Jika Anda "memiliki satu konstruktor dengan parameter yang diperlukan, getter / setter normal" maka objek Anda tidak lagi dapat diubah. yaitu. Anda dapat mengubahnya lama setelah membuat instance.
Jika itu bukan masalah bagi Anda maka Anda tidak pernah membutuhkan pola Builder di tempat pertama. Jika ini merupakan masalah maka solusi Anda cacat.
sumber