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