观察者模式

来源:互联网 发布:阿里云域名备案服务号 编辑:程序博客网 时间:2024/06/15 05:39
<?php
/**
 * 观察者模式
 */

class Paper{ /* 主题    */
    private $_observers = array();
 
    public function register($sub){ /*  注册观察者 */
        $this->_observers[] = $sub;
    }

public function remove( $sub ){
if( count( $this->_observers ) > 0 ){
array_shift($this->_observers);
}
}
     
    public function trigger(){  /*  外部统一访问    */
   $c = count($this->_observers);
        if(!empty($this->_observers)){
            foreach($this->_observers as $key => $observer){
                $observer->update(  $c , $key );
            }
        }
    }
}
 
/**
 * 观察者要实现的接口
 */
interface Observerable{
    public function update( $c ,$key);
}
 
class Subscriber implements Observerable{
    public function update( $c ,$key ){
  $k = $key +1 ;
       echo "现在一共有".$c."个人,您的队列位置为".$k;
    }
}


class Subscriber1 implements Observerable{
    public function update( $c ,$key ){
       $k = $key +1 ;
       echo "现在一共有".$c."个人,您的队列位置为".$k;
    }
}


class Subscriber2 implements Observerable{
    public function update( $c ,$key ){
        $k = $key +1 ;
        echo "现在一共有".$c."个人,您的队列位置为".$k;
    }
}


/*  测试    */
$paper = new Paper();


$paper->register(new Subscriber());
$paper->register(new Subscriber1());
$paper->register(new Subscriber2());
$paper->trigger();




$paper->remove(new Subscriber());
$paper->trigger();





0 0
原创粉丝点击