Was ist das Beobachtermuster? Das Observer-Muster definiert eine Eins-zu-viele-Beziehung zwischen Objekten.
Im Beobachtermuster gibt es Subjekte (d. h. Beobachter) und Beobachter. Das Subjekt verwendet eine gemeinsame Schnittstelle, um den Beobachter zu benachrichtigen. Das Subjekt kennt nicht die Details des Beobachters, sondern nur, dass der Beobachter die Schnittstelle des Subjekts implementiert.
Die Push-Methode im universellen Beobachtermodus ist besser geeignet. Nachfolgend schreiben wir ein Push-Beispiel. Die Wetterstation stellt eine Schnittstelle zur Verfügung, über die die Daten an jedes Dashboard gemeldet werden.
<?php //使用接口,类必须实现几个功能注册,删除,通知这几个动作 interface Subject{ public function registerObserver(Observer $o); public function removeObserver(Observer $o); public function notifyObservers(); } interface Observer{ public function update($a,$b,$c); } //各个面板不同将改行为以接口实现 interface DisplayElement{ public function display(); } class Weather implements Subject{ public $observers; public $changed=false; public $a; public $b; public $c; public function __construct(){ $this->observers = array(); } public function registerObserver(Observer $o){ $this->observers[] = $o; } public function removeObserver(Observer $o){ $key = array_search($o,$this->observers); if($key!==false){ unset($this->observers[$key]); } } public function notifyObserver(){ if($this->changed){ foreach($this->observer as $ob){ $ob->update($this->a,$this->b,$this->c); } } } public function setChanged(){ $this->changed = true; } //当数值改变时通知各个观察者 public function measurementsChanged(){ $this->setChanged(); $this->notifyObserver(); } public function setMeasurements($a,$b,$c){ $this->a = $a; $this->b = $b; $this->c = $c; $this->measurementsChanged(); } } class CurrentConditionsDisplay implements Observer, DisplayElement{ public $a; public $b; public $c; public $subject; public function __construct(Subject $weather){ $this->subject = $weather; $this->subject->registerObserver($this); } public function update($a,$b,$c){ $this->a = $a; $this->b = $b; $this->c = $c; $this->display(); } public function display(){ echo $this->a.$this->b.$this->c; } } ?>
Wir kommunizieren zwischen diesen Objekten lose gekoppelt, sodass wir die Effizienz bei späteren Wartungsarbeiten erheblich verbessern können.
Designprinzipien: Finden Sie die sich ändernden Aspekte des Programms heraus und trennen Sie sie dann nach Schnittstellen, nicht nach Implementierung.
Das Obige hat den Head-First-Observer-Modus vorgestellt, einschließlich einiger Aspekte davon. Ich hoffe, dass er für Freunde hilfreich sein wird, die sich für PHP-Tutorials interessieren.