多くの場合、(Javaでの)ビルダーパターンの実装は次のようになります。
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
}
}
}
ここにも例:
- /programming/25130510/builder-pattern-in-java
- https://www.javacodegeeks.com/2013/01/the-builder-pattern-in-practice.html
なぜ人々はビルダーとタイプの間に強い(相互の)依存関係を導入して導入するのですか?
編集:つまり、その性質上、ビルダーはインスタンスを構築したいクラスに関連付けられていることを知っています(FooBuilder -> Foo
)。私が質問しているのは:なぜ他の方法が必要なのですか(Foo -> FooBuilder
)
それどころかFoo
、ビルダーが作成されたときに新しいインスタンスを作成Foo
し、適切なビルダーメソッドが呼び出されたときにインスタンスにフィールドを設定する実装は(それほど頻繁ではありませんが)あります。流暢なAPIがまだあり、クラスをビルダーに関連付けないため、このアプローチの方が好きです。この他のアプローチの欠点はありますか?
Foo
コンストラクタがパブリックの場合にも当てはまりますか?