Suchen
Inside Wiki
Nützliche Links




 
phpforum.de bei Facebook
 
phpforum.de bei Twitter
 

Zurück   PHP Forum: phpforum.de > phpforum.de Wiki > phpforum.de Wiki

PHP Wiki Dieses Wiki sammelt Lösungen, zu Problemen, welche immer wieder im Forum auftauchen.

 
 
Artikel-Optionen Ansicht
  #1  

Standard Observer

 
Das Observer Pattern hilft bei der Entkopplung von Objekten. Soll ein oder mehrere Objekte (Observer) über den Zustand eines anderen Objekts informiert werden (Subject), so bietet dieses Pattern eine Lösung des Problems.
 

OOP Design Pattern - Inhalte

Das Pattern


Hier eine allgemeine Version des Observer Patterns:

PHP Quellcode:
interface Observer {
    public function update(Subject $subject);
}

Dieses Interface muss von jedem Observer implementiert werden und stellt sicher, dass die entsprechende Funktionalität vorhanden ist.

PHP Quellcode:
interface Subject {
  public function attach(Observer $observer);
  public function detach(Observer $observer);
  public function notify();
}

Dieses Interface wird vom Subjekt implementiert. Die Namen der Methoden haben sich so etabliert und lassen andere Entwickler sofort sehen, um welches Pattern es sich hier handelt.

Verwendung


PHP Quellcode:
class SomeKindOfSubject implements Subject
{
    protected $observers = array();
   
    public function attach(Observer $observer)
    {
        $this->observers[] = $observer;
    }
   
    public function detach(Observer $observer)
    {
        unset($this->observers[array_search($observer, $this->observers)]);
    }
   
    public function notify() {
        foreach($this->observers as $observer) {
            $observer->update($this);
        }
    }
   
    public function SomeKindOfMethod() {
        $this->notify();
    }
}

Ein mögliches Subjekt. Die Methode SomeKindOfMethod ist eine beliebige Methode, welche von Observern überwacht werden soll. An stellen an denen die Observer benachrichtigt werden sollen, rufen wir die Methode notify() auf.
PHP Quellcode:
class SomeKindOfObserver implements Observer
{
    public function update(Subject $subject)
    {
        echo "SomeKindOfObserver::update was called!\n";
    }
}

Ein möglicher Observer.
PHP Quellcode:
class SomeKindOfObserver2 implements Observer
{
    public function update(Subject $subject)
    {
        echo 'SomeKindOfObserver2::update was called!';
    }
}

Ein möglicher Observer.
PHP Quellcode:
$observer1 = new SomeKindOfObserver();
$observer2 = new SomeKindOfObserver2();

$subject = new SomeKindOfSubject();
$subject->attach($observer1);
$subject->attach($observer2);

$subject->SomeKindOfMethod();

So sieht der Instanzierungscode aus. Das erwartete Ergebnis wäre:
Code:
SomeKindOfObserver::update was called!
SomeKindOfObserver2::update was called!

In den Observern kann man natürlich wesentlich komplexere Aktionen durchführen, wie z.B. das Eintragen in eine Datenbank, etc. Es gibt keine Begrenzung in der Anzahl Observer.

Observer und MVC


Das Observer-Pattern ist ein gängiges Entwurfsmuster, das in anderen Sprachen wie z.B. Java oder ActionScript im MVC-Pattern integriert wird. Dabei wird jeweils das Model vom Controller beobachtet. Java z.B. stellt eine fertige Observable-Klasse und ein Observer-Interface zur Verfügung. Mit SPL (siehe unten) wurde versucht diese Lücke in PHP zu schliessen. Leider ist das Observer-Pattern in Zusammenhang mit MVC für PHP / HTTP / HTML ziemlich nutzlos. Andere Anwendungsbreiche in PHP können jedoch durchaus auch von diesem Pattern profitieren. Ob dabei die SPL-Interfaces Sinn machen bzw. ausreichen, sei jedem selbst überlassen

SPL


Die SPL nimmt uns hier ein wenig Arbeit ab, als das sie die Interfaces für Subjekt und Observer bereits definiert. Die Namen der Interfaces sind SplSubject und SplObserver. Die Definition entspricht der unsrigen.

« Vorheriges Kapitel   OOP Design Pattern
  Nächstes Kapitel »

Mitwirkende: puritania, pecos, combie
Erstellt von puritania, 12.02.2008 am 18:19
Zuletzt bearbeitet von puritania, 25.03.2008 am 14:25
0 Kommentare , 6085 Betrachtungen

Dieser Text steht unter der GNU-Lizenz für freie Dokumentation


 

Lesezeichen

Artikel-Optionen
Ansicht

Forumregeln
Es ist Ihnen nicht erlaubt, neue Themen zu verfassen.
Es ist Ihnen nicht erlaubt, auf Beiträge zu antworten.
Es ist Ihnen nicht erlaubt, Anhänge hochzuladen.
Es ist Ihnen nicht erlaubt, Ihre Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.

Gehe zu
Ähnliche Themen
Thema Autor Forum Antworten Letzter Beitrag
Singleton puritania PHP Wiki 10 26.04.2008 14:05
Automatisches Subject bei E-Mails hokl PHP 2 02.03.2006 12:35
Subject/Betreff übertragen kayleigh PHP 10 25.08.2005 01:09
Pattern oder nicht pattern? das ist hier die Frage! sopinon PHP 5 23.07.2005 17:32


Alle Zeitangaben in WEZ +2. Es ist jetzt 19:27 Uhr.


Powered by vBulletin® Version 3.8.8 (Deutsch)
Copyright ©2000 - 2018, Jelsoft Enterprises Ltd.
Powered by NuWiki v1.3 RC1 Copyright ©2006-2007, NuHit, LLC