• observer观察者模式的PHP实现


    用PHP是现在观察者模式。个人觉得观察者模式的重点在于观察者接口以及观察者的注册。以下是代码:

    1 <?php
    2 
    3 interface Observer {
    4     public function update($time);
    5 }
    6 
    7 ?>
    可观察者(发布者)类
    <?php

    class Observable {
        
    private $_observers = array();
        
    private $_time;
        
        
    public function registerObserver(Observer $observer) {
            
    $this->_observers[] = $observer;    
        }
        
        
    public function removeObserver(Observer $observer) {
            
    if ($index = array_search($observer, $this->_observers)) {
                
    unset($this->_observers[$index]);            
            }
        }
        
        
    public function notifyObservers() {
            
    foreach ($this->_observers as $observer) {
                
    $observer->update($this->_time);
            }    
        }
        
        
    private function _measurementsChanged() {
            
    $this->notifyObservers();
        }
        
        
    public function setMeasurements($time) {
            
    $this->_time = $time;
            
    $this->_measurementsChanged();    
        }
    }

    ?>

      

     1 <?php
     2 include_once 'Observer.php';
     3 
     4 class ObserverA implements Observer{
     5     public function __construct(Observable $observable) {
     6         $observable->registerObserver($this);
     7     }
     8     
     9     public function update($time) {
    10         echo 'ObserverA: received time is '.$time."\r\n";
    11     }
    12 }
    13 
    14 ?>
     1 <?php
     2 include_once 'Observer.php';
     3 
     4 class ObserverB implements Observer{
     5     public function __construct(Observable $observable) {
     6         $observable->registerObserver($this);
     7     }
     8     
     9     public function update($time) {
    10         echo 'ObserverB: received time is '.$time."\r\n";
    11     }
    12 }
    13 
    14 ?>
     1 <?php
     2 include 'Observable.php';
     3 include 'ObserverA.php';
     4 include 'ObserverB.php';
     5 
     6 $observable = new Observable();
     7 
     8 $observerA = new ObserverA($observable);
     9 $observerB = new ObserverB($observable);
    10 
    11 $observable->setMeasurements('2010-4-4');
    12 $observable->setMeasurements('2010-4-5');
    13 $observable->setMeasurements('2010-4-10');
    14 ?>

     运行结果:

  • 相关阅读:
    Mysql的相关命令
    设置数据窗口的过滤与排序
    org.springframework.web.servlet.DispatcherServlet noHandlerFound
    tomcatPluginV321.zip
    js获取modelandview的值
    cintanotes
    暗手机
    TASKCITY
    win commands
    book
  • 原文地址:https://www.cnblogs.com/followflows/p/1704198.html
Copyright © 2020-2023  润新知