Erlaubt einem Objekt, sein Verhalten selbständig zu ändern, wenn sich sein interner Zustand ändern soll.
Zunächst wird ein Objekt benötigt, welches verschiedene Status besitzt. In diesem Beispiel ist es eine Ampel, welche den Status Rot und Grün besitzen kann. Desweiteren benötigt das Objekt Funktionen zum Verändern des Zustandes, in diesem Fall das Schalten. Dieses Objekt, bzw. die Funktionen können dann beliebig erweitert werden. Ein Konto hat z.B. ein Besitzer der sich ändern kann und einen Geldbetrag.
abstract class Licht
{
public abstract void Handle(Ampel aktuelleAmpel);
}class Rot : Licht
{
public override void Handle(Ampel aktuelleAmpel) {
aktuelleAmpel.StatusLicht = new Gruen();
}
}
class Gruen : Licht
{
public override void Handle(Ampel aktuelleAmpel) {
aktuelleAmpel.StatusLicht = new Rot();
}
}class Ampel
{
//Aktueller Status
private Licht _statusLicht;
//Initialisierung
public Ampel (Licht DefaultLicht) {
this._statusLicht = DefaultLicht;
}
// Get / Set aktueller Status + Ausgabe von neuen Wert
public Licht StatusLicht {
get { return _statusLicht; }
set {
this._statusLicht = value;
Console.WriteLine("Ampel Farbe: " + _statusLicht.GetType().Name);
}
}
public void Schalte()
{
this._statusLicht.Handle(this);
}
}Ampel Fussgaenger = new Ampel(new Rot());
Fussgaenger.Schalte();
Fussgaenger.Schalte();