Saya telah melihat banyak implementasi pola Builder (terutama di Jawa). Semua dari mereka memiliki kelas entitas (katakanlah Personkelas), dan kelas pembangun PersonBuilder. Pembangun "menumpuk" berbagai bidang dan mengembalikan a new Persondengan argumen yang diteruskan. Mengapa kita secara eksplisit membutuhkan kelas builder, alih-alih menempatkan semua metode builder di Personkelas 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 PersonBuilderkelas?
Satu-satunya manfaat yang saya lihat, adalah kita dapat mendeklarasikan Personbidang sebagai final, sehingga memastikan kekekalan.
withNamemengembalikan salinan Orang hanya dengan bidang nama yang diubah. Dengan kata lain, Person john = new Person().withName("John");bisa bekerja walaupun Persontidak dapat diubah (dan ini adalah pola umum dalam pemrograman fungsional).
voidmetode. Jadi, misalnya jika Personmemiliki 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 thispada akhir pelaksanaannya dan itu cukup jelas. Jadi, Builder juga akan melakukan antarmuka yang lancar.
chainable setters: D