Zustand [ Übersicht ] [ Beispiel ] [ Quellen ] [ Home Entwurfsmuster ]


Beschreibung

Das Muster im Beispiel besteht wie schon erwähnt aus den Klassen Machine.e/Machine.java, AbstractState.e/AbstractState.java , StateEmpty.e/StateEmpty.java und StateCard.e/StateCard.java. Diese vier Klassen bilden einen Geldkartenaufwerter nach, der die zwei Zustände "keine Karte im Automat" und "eine Karte im Automat" besitzt.
Eine weitere Klasse ist Card.e/Card.java, die die Geldkarten nachbildet und im wesentlichen nur den Betrag speichert.

In Eiffel sorgt die Klasse MainWindow.e, die als Instanzvariablen einen Automaten und drei Geldkarten hat, für die graphische Darstellung. Die Mainfunktion ist in der Klasse main.e. Hier beginnt die Programmausführung.

In Java ist der Aufbau ähnlich: Eie Ausgabe erfolgt analog über MainWindow.java, die als Instanzvariablen wiederum einen Automaten und drei Geldkarten hat. Zur Programmausführung und erstellen des Ausgabefensters (Frame1.java) dient die Klasse Main.java.

 Abb. 1: Die Struktur des Beispiels




Beispiel

Das compilierte Beispielprogramm. Hier ein paar Screenshots:

1. Gleich nach dem Start wird der "+2"-Button gedrückt ("2 DM in den Automaten stecken"). Da der Zustand "keine Karte im Automaten" ist, wird die Methode add_money aus der Klasse StateEmpty aktiviert, die das Geld wieder zurückgibt. Diese Aktion wird im Logwindow protokolliert.

 Abb. 2: unveränderter Automat



 Abb. 3: Screenshot


2. Gleich nach dem Start wird die erste Karte in den Automaten gesteckt (">> Insert >>"-Button), und dann erst der "+2"-Button gedrückt. Da der Zustand "eine Karte im Automaten" ist, wird die Methode add_money aus der Klasse StateCard aktiviert, die das Geld akzeptiert (der Wert im Display des Automaten ist "09.00"). Es gibt keine Meldung im Logwindow.

 Abb. 4: Automat hat 2 DM akzeptiert



 Abb. 5: leeres Logwindow



[ Übersicht ] [ Beispiel ] [ Quellen ] [ Home Entwurfsmuster ]
Stand: 31.03.2005, Autor: Jan Echternach