Java Reference
In-Depth Information
Die einzelnen Zustände werden in eigene Klassen ausgelagert,
die die gemeinsame Zustandsschnittstelle implementieren.
Das Zustandsmuster lässt offen, welcher seiner Teilnehmer für die Bestimmung des
Anfangszustandes verantwortlich ist.
Für eine Anwendung ( Client-Programm ) bietet ein Kontextobjekt verschiedene Ope-
rationen an, die je nach Zustand des Kontextobjektes ein anderes Verhalten zeigen
sollen. Ein Kontextobjekt leitet den Aufruf einer solchen Operation an das aktuelle Zu-
standsobjekt weiter. Zu diesem Zweck hält die Kontextklasse eine Referenz auf das
aktuelle Zustandsobjekt. Als Typ der Referenz wird das gemeinsame Interface (bzw.
die gemeinsame abstrakte Basisklasse) der Zustandsklassen gewählt. Dies wird im
Klassendiagramm in Bild 4-42 durch die Aggregationsbeziehung zwischen der Klasse
Kontext und dem Interface IZustand ausgedrückt. Zur Laufzeit zeigt die Referenz
auf das jeweils aktuelle Zustandsobjekt. Damit ändert sich das Verhalten des entspre-
chenden Kontextobjekts, da es die Anfragen des Client-Programms an das jeweils ak-
tuelle Zustandsobjekt delegiert. Das Zustandsmuster dient zum dynamischen Aus-
tausch der Zustandsobjekte und wird daher zu den objektbasierten Entwurfsmustern
gezählt.
Im Zustandsmuster werden die einzelnen Zustände durch eigene
Klassen gekapselt, die von einer gemeinsamen abstrakten Basis-
klasse ableiten bzw. ein gemeinsames Interface implementieren.
Ein zustandsabhängiges Kontextobjekt referenziert den aktuellen
Zustand und führt Zustandsänderungen durch.
Das Zustandsmuster lässt offen, welcher seiner Teilnehmer für die Zustandsüber-
gänge verantwortlich ist. In der Grundform dieses Musters ist das Kontextobjekt für
die Zustandswechsel zuständig, da in ihm der Zustand gespeichert ist. Häufig ist die
Bestimmung des Nachfolgezustandes aber auch eine zustandsabhängige Operation
und sollte daher vom aktuellen Zustandsobjekt durchgeführt werden. Diese Alternati-
ven werden in Kapitel 4.14.3.4 ausführlich diskutiert. Im Folgenden wird die Grundform
des Musters vorgestellt.
Die Anwendung selbst kennt die Zustandsklassen und deren Objekte nicht, sondern
arbeitet nur mit dem Kontextobjekt, das die Übergänge durchführt, zusammen. Zu-
standsabhängiges Verhalten wird in der Regel mittels Zustandsautomaten (engl.
state machines ) beschrieben. Diese können in UML in Form von Zustandsdiagram-
men (siehe Beispiel in Kapitel 4.14.3.5) modelliert werden. In diesem Zusammenhang
entspricht ein Kontextobjekt der Realisierung eines Zustandsautomaten.
4.14.3.1 Klassendiagramm
Objekte der Klasse Kontext zeigen ein zustandsabhängiges Verhalten. Das bedeu-
tet, dass es in dieser Klasse Methoden gibt, deren Wirkung unterschiedlich ist, je nach-
Search WWH ::




Custom Search