Oft sehe ich die Implementierung des Builder-Musters (in Java) folgendermaßen:
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
}
}
}
Beispiele auch hier:
- /programming/25130510/builder-pattern-in-java
- https://www.javacodegeeks.com/2013/01/the-builder-pattern-in-practice.html
Warum führen Menschen die starke (gegenseitige) Abhängigkeit zwischen Builder und Typ ein, um zu bauen?
EDIT: Ich meine, ich weiß, dass der Builder naturgemäß an die Klasse gebunden ist, aus der ich eine Instanz erstellen möchte ( FooBuilder -> Foo
). Was ich frage ist: Warum gibt es die Notwendigkeit für den umgekehrten Fall ( Foo -> FooBuilder
)
Im Gegenteil, ich sehe (seltener) Implementierungen, die einen neuen Zeitpunkt für Foo
die Erstellung des Builders erstellen und die Felder für die Instanz festlegen, in der Foo
die entsprechenden Builder-Methoden aufgerufen werden. Ich mag diesen Ansatz besser, weil er immer noch eine fließende API hat und die Klasse nicht an ihren Builder bindet. Gibt es einen Nachteil dieses anderen Ansatzes?
Foo
Konstruktor öffentlich ist?