php设计模式--观察者模式

<?php
/**
*
* 被观察者
*
*/
class Subject implements SplSubject {
protected $_value;
protected $_observers;
/**
* 构造函数
*
* @return void
*/
public function __construct() {
$this->_observers = new SplObjectStorage();
}
/**
* 追加观察者
* @see SplSubject::attach()
*/
public function attach(SplObserver $observer) {
$this->_observers->attach($observer);
}
/**
* 抛弃观察者
* @see SplSubject::detach()
*/
public function detach(SplObserver $observer) {
$this->_observers->detach($observer);
}
/**
* 通知观察者
* @see SplSubject::notify()
*/
public function notify() {
foreach ($this->_observers as $observer) {
$observer->update($this);
}
}
/**
* 设置最新值
*
* @param mixed $value
* @return
*/
public function setValue($value) {
$this->_value = $value;
$this->notify();
}
/**
* 获取最后更新的值
*
* @return mixed
*/
public function getValue() {
return $this->_value;
}
}
/**
* 观察者
*
*/
class Observer implements SplObserver {
/\**
* @see SplObserver::update()
*/
public function update(SplSubject $subject) {
echo 'i know you '.$subject->getValue();
}
}
header('Content-type:text/html;charset=utf-8');
date_default_timezone_set('Asia/Shanghai');
error_reporting(E_ALL);
$subject = new Subject();
$observer = new Observer();
$subject->attach($observer);
$subject->setValue('updated');

 

你可能感兴趣的:(模式,PHP,设计,观察者)