Anschließend findet ihr das komplette Beispiel zum Eintrag Design Patterns in der Praxis – Teil 5.

interface observeable
{
    public function observer_einbauen(observer $observer);
    public function observer_rufen();
}

interface observer
{
    public function beobachten(observeable $auto);
}

class Auto implements observeable
{
    public $tank = 55;

    protected $observer = array();

    /**
     * Methode zum hinzufügen neuer Observer
     * 
     * @param  object  $observer
     */
    public function observer_einbauen(observer $observer)
    {
        $this->observer[] = $observer;
    }
    
    /**
     * Methode zum abrufen unserer hinzugefügen Observer.
     */
    public function observer_rufen()
    {
        foreach ($this->observer as $observer)
        {
            $observer->beobachten($this);
        }
    }

    /**
     * Der "fahren" Methode geben wir als Parameter die Strecke mit.
     * 
     * @param  integer  $strecke
     */
    public function fahren($strecke)
    {
        // Um das Beispiel einfach zu halten ist eine "Strecken-Einheit" = 1 liter.
        $this->tank -= $strecke;
        
        $this->observer_rufen();

        if ($this->tank < 0)
        {
            $this->tank = 0;
            echo 'Der Wagen ist liegengeblieben!';
        }
        else
        {
            echo 'Im Tank befinden sich noch ' . $this->tank . ' liter.';
        }
    }
}

class reserve_anzeige implements observer
{
    /**
     * In dieser Methode passiert die eigentliche Logik.
     *
     * @param  object  $auto
     */
    public function beobachten(observeable $auto)
    {
        if ($auto->tank < 5)
        {
            echo "Achtung! Tank ist leer - Zur nächsten Tankstelle und tanken...";
            $auto->tank = 55;
        }
    } 
}

2 comments on “Das Observer Design Pattern

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.