Spesso vedo l'implementazione del modello di builder (in Java) come segue:
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
}
}
}
Esempi anche qui:
Perché le persone introducono la strong (reciproca) dipendenza tra builder e type per costruire?
EDIT: Voglio dire, so che per sua natura il costruttore è legato alla classe da cui voglio creare un'istanza ( FooBuilder -> Foo
). Quello che chiedo è: perché c'è la necessità del contrario ( Foo -> FooBuilder
)
Al contrario, vedo implementazioni (meno frequenti) che creano una nuova istanza di Foo
quando viene creato il builder e impostano i campi sull'istanza di Foo
quando vengono chiamati i metodi builder appropriati. Mi piace questo approccio, perché ha ancora un'API fluente e non lega la classe al suo costruttore. C'è qualche aspetto negativo di questo altro approccio?