Saya telah melihat banyak implementasi pola Builder (terutama di Jawa). Semua dari mereka memiliki kelas entitas (katakanlah Person
kelas), dan kelas pembangun PersonBuilder
. Pembangun "menumpuk" berbagai bidang dan mengembalikan a new Person
dengan argumen yang diteruskan. Mengapa kita secara eksplisit membutuhkan kelas builder, alih-alih menempatkan semua metode builder di Person
kelas itu sendiri?
Sebagai contoh:
class Person {
private String name;
private Integer age;
public Person() {
}
Person withName(String name) {
this.name = name;
return this;
}
Person withAge(int age) {
this.age = age;
return this;
}
}
Saya hanya bisa mengatakannya Person john = new Person().withName("John");
Mengapa perlu PersonBuilder
kelas?
Satu-satunya manfaat yang saya lihat, adalah kita dapat mendeklarasikan Person
bidang sebagai final
, sehingga memastikan kekekalan.
withName
mengembalikan salinan Orang hanya dengan bidang nama yang diubah. Dengan kata lain, Person john = new Person().withName("John");
bisa bekerja walaupun Person
tidak dapat diubah (dan ini adalah pola umum dalam pemrograman fungsional).
void
metode. Jadi, misalnya jika Person
memiliki metode yang mencetak nama mereka, Anda masih dapat menghubungkannya dengan Antarmuka Lancar person.setName("Alice").sayName().setName("Bob").sayName()
. Ngomong-ngomong, saya melakukan anotasi pada JavaDoc dengan saran Anda @return Fluent interface
- itu generik dan cukup jelas ketika itu berlaku untuk metode apa pun yang dilakukan return this
pada akhir pelaksanaannya dan itu cukup jelas. Jadi, Builder juga akan melakukan antarmuka yang lancar.
chainable setters
: D