在公司中,当老板不在的时候,大家都免不了偷个懒,比如女同事逛逛淘宝,男同事看个篮球比赛。但是如果老板突然回来,发现自己没有工作,这种情况就比较尴尬!正在大家为此事上头时,前台王小姐说:“当老板回来时,她会打电话通知大家!”。这样大家就可以放心的偷懒了。——这种情况就可以抽象的理解为观察者模式。前台秘书处负责传递消息,办公室内每个员工都是观察者,当有情况发生时,秘书处会将信息发送至每个观察者,确保不会尴尬!
使用PHP模拟上述情景,观察者数量设置为5;当秘书处发送消息时,各个观察者将打印自己收到的消息,用于回复秘书处。
<?php //主题接口 interface Boss{ public function register(Observer $observer); public function notify(); } //观察者接口 interface Observer{ public function caution(); } //主题 class Action implements Boss{ public $_observers=array(); public function register(Observer $observer){ $this->_observers[]=$observer; } public function notify(){ foreach($this->_observers as $observer){ $observer->caution(); } } } //观察者职员1 class Zhi1 implements Observer{ public function caution(){ echo "职员1请注意:BOSS出现,迅速就位!!!<hr/>"; } } //观察者职员2 class Zhi2 implements Observer{ public function caution(){ echo "职员2请注意:BOSS出现,迅速就位!!!<hr/>"; } } //观察者职员3 class Zhi3 implements Observer{ public function caution(){ echo "职员3请注意:BOSS出现,迅速就位!!!<hr/>"; } } //观察者职员2 class Zhi4 implements Observer{ public function caution(){ echo "职员4请注意:BOSS出现,迅速就位!!!<hr/>"; } } //观察者职员1 class Zhi5 implements Observer{ public function caution(){ echo "职员5请注意:BOSS出现,迅速就位!!!<hr/>"; } } //观察者职员1 class Zhi6 implements Observer{ public function caution(){ echo "职员6请注意:BOSS出现,迅速就位!!!<hr/>"; } } //应用实例 $action=new Action(); $action->register(new Zhi1()); $action->register(new Zhi2()); $action->register(new Zhi3()); $action->register(new Zhi4()); $action->register(new Zhi5()); $action->register(new Zhi6()); $action->notify();