PHP设计模式,观察者模式介绍
观察者模式
观察者模式对应了一种一对多的依赖关系,让多个观察者对象同时监听某一主题对象。这个主题发生变化时,会通知所有观察者对象,使他们能够自己自动更新。
优点
1.观察者和主题之间的耦合度较小;
2.支持广播通信;
缺点
由于观察者并不知道其它观察者的存在,它可能对改变目标的最终代价一无所知。这可能会引起意外的更新。
PHP代码
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67
| <?php
namespace ObservePattern; use SplObserver; use SplSubject;
class subject implements SplSubject { private $observers;
public function __construct() { $this->observers = array(); }
public function attach(SplObserver $observer) { return array_push($this->observers, $observer); }
public function detach(SplObserver $observer) { $idx = array_search($observer, $this->observers, true); if ($idx) { unset($this->observers[$idx]); } }
public function notify() { foreach ($this->observers as $observer) { $observer->update($this); } return true; } }
class observe implements SplObserver {
public function update(SplSubject $subject) { echo "通知观察者</br>"; } }
class observe1 implements SplObserver {
public function update(SplSubject $subject) { echo "通知另一观察者</br>"; } }
$subject = new subject(); $observer = new observe(); $observer1 = new observe1();
header("Content-type: text/html; charset=utf-8"); $subject->attach($observer); $subject->attach($observer1);
$subject->notify();
$subject->detach($observer1); $subject->notify();
|