zoukankan      html  css  js  c++  java
  • 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 ?>

     运行结果:

  • 相关阅读:
    Flask—09-项目部署(01)
    Flask—08-建立自己的博客(02)
    Flask—07-建立自己的博客(01)
    Day 22:网络编程(3)
    Day 21:网络编程(2)
    Day 20:网络编程(1)
    Day 19:Properties配置文件类、打印流(printStream) 、 编码与解码
    Day 18:SequenceInputStream、合并切割mp3、对象输入输出流对象
    Day 17:缓冲输出字符流和用缓冲输入输出实现登录、装饰者设计模式
    Day 16:输入输出字符流、缓冲输入字符流
  • 原文地址:https://www.cnblogs.com/followflows/p/1704198.html
Copyright © 2011-2022 走看看