php中的观察者模式
当一个对象状态发生改变后,会影响到其他几个对象的改变,这时候可以用观察者模式。像wordpress这样的应用程序中,它容外部开发组开发插件,比如用户授权的博客统计插件、积分插件,这时候可以应用观察者模式,先注册这些插件,当用户发布一篇博文后,就回自动通知相应的插件更新。
观察者模式符合接口隔离原则,实现了对象之间的松散耦合。
观察者模式UML图:
//主题接口 接口Subject { public function register(Observer $ observer ); public function notify(); } // 观察者接口 interface Observer { public function watch(); } //主题 class Action implements Subject { public $ _observers = array (); 公共功能寄存器(Observer $ observer ){ $ this - > _observers [] = $ observer ; } //实现借口 public function notify(){ foreach ($ this - > _observers as $ observer ){ $ observer - > watch(); } } } //观察者 类猫实现观察员{ 公共功能的手表(){ 回声“猫看电视<HR />” ; } } class Dog implements Observer { public function watch(){ echo “Dog Watches TV <hr />” ; } } 类的人实现了Observer { public function 观看(){ 回声“人们看电视<hr />” ; } } //应用实例 $ action = new Action(); $ action - > register(new Cat()); $ action - > register(new People()); $ action - > register(new Dog()); $ action - > notify();
感兴趣的可以尝试一下