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 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!