Manfaat menggunakan kelas builder statis statis


9

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:


8

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 :-)


1
Ini tidak mengatakan apa-apa tentang mengapa batin harus statis ...
Jimmy Hoffa

Kekekalan dan efek samping juga merupakan tujuan.
Martijn Verburg

6

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.


Saya pikir pola builder tidak ada hubungannya dengan mutabilitas, bahkan contoh gof pada wiki bisa berubah ... en.wikipedia.org/wiki/Builder_pattern#Java juga, pola tersebut memiliki manfaat yang saya uraikan dalam pertanyaan.
NimChimpsky

3
@NimChimpsky: Apakah pola Builder dapat diterapkan untuk membuat objek yang dapat diubah tidak menjadi masalah. Pertanyaannya adalah, bukan? Getters dan setters telah ada selama-lamanya, di mana objek bisa berubah-ubah mereka adalah solusi yang sangat solid, tetapi orang-orang berlari ke masalah umum dengan menciptakan objek yang tidak dapat diubah: rantai konstruktor yang tidak dapat dikelola. Builder adalah solusi umum dan dengan demikian menjadi pola, untuk memudahkan komunikasi.
pdr
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.