Seringkali saya melihat implementasi pola builder (di Jawa) menjadi seperti ini:
public class Foo {
private Foo(FooBuilder builder) {
// get alle the parameters from the builder and apply them to this instance
}
public static class FooBuilder {
// ...
public Foo build() {
return new Foo(this); // <- this part is what irritates me
}
}
}
Contoh juga di sini:
- /programming/25130510/builder-pattern-in-java
- https://www.javacodegeeks.com/2013/01/the-builder-pattern-in-practice.html
Mengapa orang memperkenalkan ketergantungan (saling) kuat antara pembangun dan tipe untuk membangun?
EDIT: Maksud saya, saya tahu bahwa pada dasarnya pembangun terkait dengan kelas yang ingin saya bangun instance dari ( FooBuilder -> Foo
). Yang saya tanyakan adalah: mengapa ada kebutuhan untuk sebaliknya ( Foo -> FooBuilder
)
Sebaliknya saya melihat (lebih jarang) implementasi yang membuat instace baru Foo
ketika builder dibuat dan mengatur bidang pada instance Foo
ketika metode builder yang sesuai dipanggil. Saya suka pendekatan ini lebih baik, karena masih memiliki API yang lancar dan tidak mengikat kelas untuk pembangunnya. Apakah ada kelemahan dari pendekatan lain ini?
Foo
konstruktor bersifat publik?