首页 > 后端开发 > php教程 > 设计模式php实例:观察者模式

设计模式php实例:观察者模式

WBOY
发布: 2016-06-20 12:30:40
原创
811 人浏览过

当一个对象状态发生改变后,会影响到其他几个对象的改变,这时候可以用观察者模式。像wordpress这样的应用程序中,它容外部开发组开发插件,比如用户授权的博客统计插件、积分插件,这时候可以应用观察者模式,先注册这些插件,当用户发布一篇博文后,就回自动通知相应的插件更新。观察者模式符合接口隔离原则,实现了对象之间的松散耦合。观察者模式UML图:在php SPL中已经提供SplSubject和SqlOberver接口[php] view plain copyinterface SplSubject  {      function attach(SplObserver $observer);      function detach(SplObserver $observer);      function notify();  }  interface SqlObserver  {      function update(SplSubject $subject);  }  下面具体实现上面例子[php] view plain copyclass Subject implements SplSubject  {      private $observers;        public function attach(SplObserver $observer)      {          if (!in_array($observer, $this->observers)) {              $this->observers[] = $observer;          }      }          public function detach(SplObserver $observer)      {          if (false != ($index = array_search($observer, $this->observers))) {              unset($this->observers[$index]);          }      }        public function post()      {          //post相关code          $this->notify();      }        private function notify()      {          foreach ($this->observers as $observer) {              $observer->update($this);          }      }        public function setCount($count)      {          echo "数据量加" . $count;      }      public function setIntegral($integral)      {           echo "积分量加" . $integral;      }    }      class Observer1 implements SplObserver  {      public function update($subject)      {          $subject-> setCount(1);      }  }  class Observer2 implements SplObserver  {      public function update($subject)      {          $subject-> setIntegral(10);      }  }      class Client  {      public  function test()      {          $subject = new Subject();          $subject->attach(new Observer1());          $subject->attach(new Observer2());          $subject->post();//输出:数据量加1 积分量加10      }  }
登录后复制

  

来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板