Haben Sie Ihre Methoden this
zurückkehren mögen :
public Dialog setMessage(String message)
{
//logic to set message
return this;
}
nach jedem Aufruf einer der Methoden Auf diese Weise werden Sie das gleiche Objekt erhalten zurückgeführt, so dass Sie eine andere Methode auf aufrufen können.
Diese Technik ist nützlich, wenn Sie eine Reihe von Methoden für ein Objekt aufrufen möchten: Es reduziert die Menge an Code, die erforderlich ist, um dies zu erreichen, und ermöglicht Ihnen, nach der Methodenkette einen einzelnen zurückgegebenen Wert zu erhalten.
Ein Beispiel für die Menge von Codes zu reduzieren wäre, um einen Dialog zeigen erforderlich:
// Your Dialog has a method show()
// You could show a dialog like this:
new Dialog().setMessage("some message").setTitle("some title")).show();
Ein Beispiel für den einzelnen zurückgegebene Wert unter Verwendung sei:
// In another class, you have a method showDialog(Dialog)
// Thus you can do:
showDialog(new Dialog().setMessage("some message").setTitle("some title"));
Ein Beispiel für die Verwendung von Builder-Muster, das Dennis in dem Kommentar zu Ihrer Frage erwähnt:
new DialogBuilder().setMessage("some message").setTitle("some title").build().show();
Der Erbauer pat Mit dieser Option können Sie alle Parameter für eine neue Instanz einer Klasse festlegen, bevor das Objekt erstellt wird (berücksichtigen Sie Klassen, die final
Felder oder Objekte enthalten, für die das Festlegen eines Werts nach dem Erstellen teurer ist als beim Erstellen).
Im Beispiel oben: setMessage(String)
, gehören setTitle(String)
zur DialogBuilder
Klasse und gibt die gleiche Instanz von DialogBuilder
, dass sie aufgefordert sind; Die build()
-Methode gehört zur Klasse DialogBuilder
, gibt aber ein Objekt Dialog
zurück, das show()
gehört zur Klasse Dialog
.
Extra-
Dies könnte nicht auf Ihre Frage in Beziehung gesetzt werden, aber es könnte Ihnen und anderen helfen, die sich über diese Frage kommen.
Das funktioniert gut für die meisten Anwendungsfälle: alle Anwendungsfälle, die Vererbung nicht beinhalten und einige besondere Fälle Vererbung beteiligt, wenn die abgeleitete Klasse neue Methoden nicht hinzufügen, die Sie Kette wollen zusammen und du bist nicht daran interessiert, das Ergebnis der Methodenkette als Objekt des Abgeleiteten zu verwenden (ohne Casting).
Wenn Sie Methoden für Objekte abgeleiteter Klassen verketten möchten, die keine Methode in ihrer Basisklasse haben oder wenn die Methodenkette das Objekt als Referenz der abgeleiteten Klasse zurückgeben soll, können Sie a schau dir die Antworten für this question an.
Wie die Builder-Muster? –
Dies wird in der Regel als fließend oder fließend bezeichnet. – Pureferret
Sie würden einen Builder für den Dialog erstellen, anstatt die Setter für eine flüssige API zu verwenden. Wenn Sie dies tun, werden viele Bean-ähnliche Zugriffe nicht mehr funktionieren, da die Frameworks die Setter so einschränken, dass sie void zurückgeben. Schauen Sie sich Projekt lombok an, wenn Sie nicht alle diese Kesselplatte schreiben möchten. –