<meta charset=‘utf-8‘ /> <title>观察者模式</title> <?php class Tongzhi implements SPLSubject { protected $subs = array(); public $username = ‘我是被观察者‘; public function __construct(){ } public function attach(SPLObserver $sub){ $this->subs[] = $sub; } public function detach(SPLObserver $sub){ $keys = array_keys($this->subs,$sub); $key = $keys[0]; unset($this->subs[$key]); } public function notify(){ foreach ($this->subs as $value) { $value->update($this); } } } class Obs1 implements SPLObserver { public function update(SPLSubject $tz){ echo $tz->username.‘,我是观察者1<br />‘; } } class Obs2 implements SPLObserver { public function update(SPLSubject $tz){ echo $tz->username.‘,我是观察者2<br />‘; } } class Obs3 implements SPLObserver { public function update(SPLSubject $tz){ echo $tz->username.‘,我是观察者3<br />‘; } } $tz = new Tongzhi; $tz->attach(new Obs1); $tz->attach(new Obs2); $tz->detach(new Obs2); $tz->attach(new Obs3); $tz->notify(); ?>
原文:http://my.oschina.net/u/946060/blog/315828