设为首页 - 加入收藏 ASP站长网(Aspzz.Cn)- 科技、建站、经验、云计算、5G、大数据,站长网!
热搜: 手机 公司 数据
当前位置: 首页 > 站长学院 > PHP教程 > 正文

PHP观察者模式其有什么用,实现代码是什么

发布时间:2023-01-31 11:06 所属栏目:121 来源:互联网
导读:这篇文章主要讲解了PHP观察者模式有什么用,实现代码是什么,文中的讲解内容简单、清晰、详细,对大家学习或是工作可能会有一定的帮助,希望大家阅读完这篇文章能有所收获。下面就请大家跟着小编的思路一起来学习一下吧。 代码如下: /** * 观察者模式 * * 定
  这篇文章主要讲解了“PHP观察者模式有什么用,实现代码是什么”,文中的讲解内容简单、清晰、详细,对大家学习或是工作可能会有一定的帮助,希望大家阅读完这篇文章能有所收获。下面就请大家跟着小编的思路一起来学习一下吧。
 
  代码如下:
 
  /**
 
  * 观察者模式
 
  *
 
  * 定义对象间的一种一对多的依赖关系,以便当一个对象的状态发生改变时,所有依赖于它的对象都得到通知并自动刷新
 
  * 能够便利地创建查看目标对象状态的对象,并且提供与核心对象非耦合的指定功能
 
  * 插件系统
 
  */
 
  class Observerable
 
  {
 
  private $_observers = array();
 
  public function registerObserver($observer)
 
  {
 
  $this->_observers[] = $observer;
 
  }
 
  public function removeObserver($observer)
 
  {
 
  $key = array_search($observer,$this->_observers);
 
  if(!($key === false))
 
  {
 
  unset($this->_observers[$key]);
 
  }
 
  }
 
  public function notifyObservers()
 
  {
 
  foreach($this->_observers as $observer)
 
  {
 
  if($observer instanceof Observer) $observer->update($this);
 
  }
 
  }
 
  }
 
  interface Observer
 
  {
 
  public function update($observer);
 
  }
 
  interface DisplayElement
 
  {
 
  public function display();
 
  }
 
  // -- 实例类定义
 
  class NewsObserverable extends Observerable
 
  {
 
  private $_sports_news;
 
  public function setSportsNews($data)
 
  {
 
  $this->_sports_news = $data;
 
  $this->notifyObservers();
 
  }
 
  public function getSportsNews()
 
  {
 
  return $this->_sports_news;
 
  }
 
  private $_local_news;
 
  public function setLocalNews($data)
 
  {
 
  $this->_local_news = $data;
 
  $this->notifyObservers();
 
  }
 
  public function getLocalNews()
 
  {
 
  return $this->_local_news;
 
  }
 
  }
 
  class SportsNews implements Observer,DisplayElement
 
  {
 
  private $_data = null;
 
  public function update($observer)
 
  {
 
  if($this->_data != $observer->getSportsNews())
 
  {
 
  $this->_data = $observer->getSportsNews();
 
  $this->display();
 
  }
 
  }
 
  public function display()
 
  {
 
  echo $this->_data.date("Y-m-d H:i:s")."
 
  ";
 
  }
 
  }
 
  class LocalNews implements Observer,DisplayElement
 
  {
 
  private $_data = null;
 
  public function update($observer)
 
  {
 
  if($this->_data != $observer->getLocalNews())
 
  {
 
  $this->_data = $observer->getLocalNews();
 
  $this->display();
 
  }
 
  }
 
  public function display()
 
  {
 
  echo $this->_data.date("Y-m-d H:i:s")."
 
  ";
 
  }
 
  }
 
  // -- 实例化 ---
 
  $objObserver = new NewsObserverable();
 
  $local = new LocalNews();
 
  $sports = new SportsNews();
 
  $objObserver->registerObserver($local);
 
  $objObserver->registerObserver($sports);
 
  $objObserver->setSportsNews("sports news 1 ");
 
  $objObserver->setLocalNews("local news 1 ");
 
  $objObserver->removeObserver($sports);
 
  $objObserver->setLocalNews("local news 2 ");
 
  $objObserver->setSportsNews("sports news 2 ");
 
  $objObserver->removeObserver($local);
 
  $objObserver->setLocalNews("local news 3 ")
 

(编辑:ASP站长网)

    网友评论
    推荐文章
      热点阅读