Heim  >  Artikel  >  Backend-Entwicklung  >  Was Sie nicht über das PHP-Beobachtermuster wissen

Was Sie nicht über das PHP-Beobachtermuster wissen

一个新手
一个新手Original
2017-09-12 10:16:111284Durchsuche

Beginnen wir mit dem Namen. Das Wort „Beobachtermodus“ enthält viele Informationen. Kinder, die viele Online-Spiele gespielt haben, sollten wissen, dass es auch in Doudizhu neben den Spielern auch eine Figur namens „Observer“ gibt. Bei der Mustergestaltung, über die wir heute sprechen, gilt das Gleiche auch für den Betrachter. Zunächst muss es ein „Thema“ geben. Nur zu einem Thema können sich Beobachter auf kleinen Hockern versammeln. Zweitens muss der Beobachter auch über eigene Operationen verfügen. Sonst hat es keinen Sinn, sich zu versammeln und nichts zu tun.

Aus prozessorientierter Sicht registriert sich zunächst der Beobachter beim Subjekt . Nach der Registrierung benachrichtigt das Subjekt den Beobachter, einen entsprechenden Vorgang und das Ganze ist vorbei.

Aus objektorientierter Sicht stellen Themen Schnittstellen für die Registrierung und Benachrichtigung bereit, und Beobachter stellen Schnittstellen für ihre eigenen Operationen bereit. (Diese Beobachter haben dieselbe Schnittstelle.) Beobachter verwenden die Schnittstelle des Subjekts, um sich beim Thema zu registrieren, und das Subjekt verwendet die Beobachterschnittstelle, um Beobachter zu benachrichtigen. Der Kopplungsgrad ist recht gering.

Wie implementiert man die Beobachterregistrierung? Das vorherige Registrantenmuster kann uns leicht Ideen liefern. Fügen Sie diese Objekte einfach einem Registrierungsbaum hinzu. Wie benachrichtigen? Dies ist einfacher: Durchlaufen Sie den Registrierungsbaum und lassen Sie jedes Objekt die von seiner Schnittstelle bereitgestellten Operationen implementieren. ​

<?php
// 主题接口
interface Subject{
    public function register(Observer $observer);
    public function notify();
}
// 观察者接口
interface Observer{
    public function watch();
}
// 主题
class Action implements Subject{
     public $_observers=array();
     public function register(Observer $observer){
         $this->_observers[]=$observer;
     }

     public function notify(){
         foreach ($this->_observers as $observer) {
             $observer->watch();
         }

     }
 }

// 观察者
class Cat implements Observer{
     public function watch(){
         echo "Cat watches TV<hr/>";
     }
 } 
 class Dog implements Observer{
     public function watch(){
         echo "Dog watches TV<hr/>";
     }
 } 
 class People implements Observer{
     public function watch(){
         echo "People watches TV<hr/>";
     }
 }

// 应用实例
$action=new Action();
$action->register(new Cat());
$action->register(new People());
$action->register(new Dog());
$action->notify();
Das sogenannte Muster ist eher eine Idee und es besteht keine Notwendigkeit, sich an Codedetails zu halten. Beim Beobachtermuster geht es eher um zwei unabhängige Klassen, die Schnittstellen verwenden, um etwas zu vervollständigen, das sehr kompliziert sein sollte. Wenn wir keine Themenklassen verwenden, müssen wir dennoch kontinuierlich Instanzen erstellen und Vorgänge in einer Schleife ausführen. Jetzt müssen Sie nur noch eine Instanz erstellen und die Benachrichtigungsmethode nur einmal aufrufen, um den Vorgang auszuführen.

Ausgehend vom Singleton-Modus habe ich mir überlegt, wie man den Code Schritt für Schritt implementiert. Jetzt wurde der größte Teil des Implementierungscodes in einem Satz erklärt. Er basiert tatsächlich auf der kontinuierlichen Akkumulation vorherige. Ich habe wirklich das Gefühl, dass ich durch das kontinuierliche Erlernen von Designmustern mein Denken über objektorientierte Programmierung erheblich vertiefen kann. Natürlich ist es immer noch sinnlos, auf Papier zu reden, es ist besser, mehr Übung zu machen~~·


Das obige ist der detaillierte Inhalt vonWas Sie nicht über das PHP-Beobachtermuster wissen. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn