Thường thì tôi thấy việc triển khai mẫu trình xây dựng (trong Java) là như thế này:
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
}
}
}
Ví dụ cũng ở đây:
- /programming/25130510/builder-potype-in-java
- https://www.javacodegeek.com/2013/01/the-builder-potype-in-practice.html
Tại sao mọi người giới thiệu sự phụ thuộc mạnh mẽ (lẫn nhau) giữa người xây dựng và loại để xây dựng?
EDIT: Ý tôi là, tôi biết rằng về bản chất, trình xây dựng được gắn với lớp tôi muốn xây dựng một thể hiện từ ( FooBuilder -> Foo
). Điều tôi thắc mắc là: tại sao lại có sự cần thiết cho cách khác ( Foo -> FooBuilder
)
Ngược lại, tôi thấy các triển khai (ít thường xuyên hơn) tạo ra một bản năng mới Foo
khi trình tạo được tạo và đặt các trường theo trường hợp Foo
khi các phương thức xây dựng thích hợp được gọi. Tôi thích cách tiếp cận này tốt hơn, bởi vì nó vẫn có API thông thạo và không ràng buộc lớp với trình tạo của nó. Có bất kỳ nhược điểm của phương pháp khác này?
Foo
xây dựng là công khai?