Ich versuche, eine Java-Klasse für ein Liniendiagramm (mit Builder-Muster) zu erstellen, die viele Eigenschaften enthält. Basierend auf der Anwendung dieser Eigenschaften versuche ich, innere Builder-Klassen zu erstellen (z. B. X-Achsen-Eigenschaften, Y-Achsen-Eigenschaften usw.). Ich bin neu in Java und ich würde gerne wissen, ob es möglich ist, Builder-Objekte wie unten in meinem Beispiel aufzurufen. Ich folgte einem Link Can the builder pattern ever be doing too much?. das würde Objekte in Inkrementen bauen. Ich mochte die Idee. Ich weiß jedoch nicht, wie ich es für mein Szenario verwenden könnte.Verschachtelungsersteller Musterklassen in Java
Invoke-Methode:
new LineGraph().UiPropBuilder(ctx)
.setBackgroundColor(Color.BLUE)
.build()
.XAxisProperties()
.enableGridLines(true)
.build()
.YAxisProperties()
.enableGridLines(false)
.build();
Ist es möglich, zu nennen .build() Anweisung nur einmal alle Objekte zu erstellen, anstatt sie mehrere Male des Wiederholens?
Klasse:
public class LineGraph{
private LineGraph()
public static class UiPropBuilder{
private Integer mBackgroundColor;
private Boolean bTouchEnabled;
...
public UiPropBuilder (Context ctx) { this.ctx = ctx; }
public UiPropBuilder setBackgroundColor(Integer mBackgroundColor){ this.mBackgroundColor = mBackgroundColor; return this;}
public UiPropBuilder touchEnabled(Boolean bTouchEnabled){ this.bTouchEnabled = bTouchEnabled; return this;}
... some more properties...
public UiPropBuilder build(){ return new UiPropBuilder(this); }
}
// X-Axis properties builder
public static class XAxisProperties{
// variable declarations and constructor omitted
public XAxisProperties enableGridLines(Boolean enable) {this.enable = enable); return this;}
public XAxisProperties build(){ return new XAxisProperties(this);}
// Y-Axis properties Builder
public static class YAxisProperties{
// variable declarations and constructor omitted
public YAxisProperties enableGridLines(Boolean enable) {this.enable = enable); return this;}
public YAxisProperties build(){ return new YAxisProperties(this);}
}
In Ihrer Frage "Anweisung .build() nur einmal aufrufen, um alle Objekte zu erstellen". Konnte man schreiben "Anweisung .build()" nur einmal zu erstellen, um das mit allen Eigenschaften zu erstellen " – alphablue