<?php// 观察者模式/** * abstract subject */interface Subject{ /** * add Observer */ public function attach(Observer $obs); /** * remove Observer */ public function detach(Observer $obs); /** * notify Observer */ public function notify();}interface Observer{ public function update(Subject $sub);}/** * concrete subject */class ConcreteSubject implements Subject{ PRivate $observerList = array(); public function attach(Observer $obs) { $this->observerList[] = $obs; } public function detach(Observer $obs) { $this->observerList = array_diff($this->observerList, [$obs]); } public function notify() { foreach($this->observerList as $ol) { $ol->update($this); } } public function doAct() { echo 'DoAct ... <br/>'; $this->notify(); }}/** * concrete observer 1 */class Observer1 implements Observer{ public function update(Subject $sub) { echo 'Observer one updated! <br/>'; }}/** * concrete observer 2 */class Observer2 implements Observer{ public function update(Subject $sub) { echo 'Observer two updated! <br/>'; }}// test code$sub = new ConcreteSubject();$sub->attach(new Observer1()); //add observer$sub->attach(new Observer1());$sub->attach(new Observer2());$sub->doAct();
新闻热点
疑难解答