当前位置:首页 > PHP教程 > php应用 > 列表

php中的观察者模式简单实例

发布:smiling 来源: PHP粉丝网  添加日期:2021-05-08 20:27:57 浏览: 评论:0 

这篇文章主要介绍了php中的观察者模式简单实例,观察者模式是设计模式中比较常见的一个模式,包含两个或者更多的互相交互的类,本文直接给出实现代码,需要的朋友可以参考下

观察者模式是设计模式中比较常见的一个模式,包含两个或者更多的互相交互的类。这一模式允许某个类观察另外一个类的状态,当被观察类的状态发生变化时候,观察者会进行得到通知进而更新相应状态。

php的SPL标准类库提供了SplSubject和SplObserver接口来实现,被观察的类叫subject,负责观察的类叫observer。这一模式是SplSubject类维护了一个特定状态,当这个状态发生变化时候,它就会调用notify方法。调用notify方法时,所有之前使用attach方法注册的SplObserver实例的update方法都会调用,Demo如下:

  1. class DemoSubject implements SplSubject{ 
  2.     private $observers$value
  3.  
  4.     public function __construct(){ 
  5.         $this->observers = array(); 
  6.     } 
  7.  
  8.     public function attach(SplObserver $observer){ 
  9.         $this->observers[] = $observer
  10.     } 
  11.  
  12.     public function detach(SplObserver $observer){ 
  13.         if($idx = array_search($observer$this->observers, true)){ 
  14.             unset($this->observers[$idx]); 
  15.         } 
  16.     } 
  17.  
  18.     public function notify(){ 
  19.         foreach($this->observers as $observer){ 
  20.             $observer->update($this); 
  21.         } 
  22.     } 
  23.  
  24.     public function setValue($value){ 
  25.         $this->value = $value
  26.         $this->notify(); 
  27.     } 
  28.  
  29.     public function getValue(){ 
  30.         return $this->value; 
  31.     } 
  32.  
  33. class DemoObserver implements SplObserver{ 
  34.     public function update(SplSubject $subject){ 
  35.         echo 'The new value is '$subject->getValue(); 
  36.     } 
  37.  
  38. $subject = new DemoSubject(); 
  39. $observer = new DemoObserver(); 
  40. $subject->attach($observer); 
  41. $subject->setValue(5);

Tags: php观察者模式

分享到: