深圳达内php大咖授课,强大的师资实战授课模式项目经理全程指导开放式机房.0基础5个月晋升php开发程师!一门php培训课程解决就业/转行/升职/加薪四大.....
佛山php培训,php学习技巧汇总,PHPH5全栈工程师,佛山众培,php学习,系统php学习方案,资源汇总,项目实战教学,不一样的.....
南京php培训,php培训教学靠谱,变态严管,每年有众多学员受益于兄弟连php培训,学php当然兄弟连,众多学员的口碑之选.兄弟连php培训可以试学.....
北京php培训,php学习技巧汇总,PHPH5全栈工程师,北京兄弟连,php学习,系统php学习方案,资源汇总,项目实战教学,不一样.....
观察者模式:
观察者设计模式定义了对象间的一种一对多的依赖关系,以便一个对象的状态发生变化时,所有依赖于它的对象都得到通知并自动刷新。
实现观察者模式有很多形式,比较直观的一种是使用一种“注册——通知——撤销注册”的形式。下面的图详细的描述了这样一种过程:
观察者
(Observer)将自己注册到被观察对象(Subject)中,被观察对象将观察者存放在一个容器(Container)里。
被观察
被观察对象发生了某种变化,从容器中得到所有注册过的观察者,将变化通知观察者。
撤销观察
观察者告诉被观察者要撤销观察,被观察者从容器中将观察者去除。
以下实例展示了安全验证和广告推送这两个观察者观察用户登录,登录后用户通知各个观察者执行自己的代码。
loginNum=rand(1,10); $this->hobby=$hobby; $this->name=$name; // 用来保存观察者的对象 $this->observers=new SplObjectStorage(); } // 用户登录入口 public function login(){ echo '登录成功后通知:'; $this->notify(); } // 添加观察者 public function attach(SplObserver $observer){ $this->observers->attach($observer); } // 删除观察者 public function detach(SplObserver $observer){ $this->observers->detach($observer); } /** * 循环遍历观察者发送通知 */ public function notify(){ // 指针指向头部 $this->observers->rewind(); while ($this->observers->valid()) { // 当前观察者 $observer=$this->observers->current(); // var_dump($observer); // 传递当前用户 $observer->update($this); $this->observers->next(); } }}///////////////// 定义安全验证观察者 /////////////////class Secrity implements SplObserver{ /** * 本观察者通知的具体方法 * @param SplSubject $subject [被观察者user] */ public function update(SplSubject $subject){ if($subject->loginNum<=3){ echo $subject->name.',这是第'.$subject->loginNum.'登录.'; }else{ echo $subject->name.',这是第'.$subject->loginNum.'登录,登录次数过多.'; } }}///////////////// 定义广告推荐观察者 /////////////////class Commend implements SplObserver{ public function update(SplSubject $subject){ if($subject->hobby=='car') { echo '给你推荐汽车广告'.PHP_EOL; }else if($subject->hobby=='php'){ echo '推荐php培训广告'.PHP_EOL; }else{ echo '好好学习,天天向上'.PHP_EOL; } }}// 测试$ming=new User('小明','php');// 添加观察者$secrity=new Secrity();$ming->attach($secrity);$commend=new Commend(); $ming->attach($commend);$ming->login();echo '------------------------------------------------------'.PHP_EOL;$hong=new User('小红'); // 添加观察者$secrity=new Secrity();$hong->attach($secrity);$commend=new Commend();$hong->attach($commend);// 删除广告推荐$hong->detach($commend);$hong->login();
同意《隐私政策》并允许推荐给更多服务商为您提供服务!