php设计模式之观察者模式

观察者模式:能够更便利地创建查看目标对象状态的对象,并且提供与核心对象非耦合的指定功能性。

利用这种模式可以方便地创建一个对象(观察者),其可以用来“监视”另一个对象(被观察者)的状态。这样,就可以在不必完全重构某些核心对象(可以理解成被观察者)的情况下,向现有的应用层序填加额外的功能。

即是动态创建对象(观察者),根据被观察者的状态动态调用观察者动作行为。

1. 被观察者 添加观察者,(attach)

2. 根据被观察者动态调用观察者的行为,即运行观察者。(notify)

一、php库中定义的接口splSubject  splObserver

<?php
class Subject implements SplSubject {
protected $_value;
protected $_observers;
public function __construct() {
$this->_observers = new SplObjectStorage ();
}
public function attach(SplObserver $object) {
$this->_observers->attach ( $object );
}
public function detach(SplObserver $object) {
$this->_observers->detach ( $object );
}
public function notify() {
foreach ( $this->_observers as $object ) {
$object->update ( $this );
}
}
public function setValue($value) {
$this->_value = $value;
$this->notify ();
}
public function getValue() {
return $this->_value;
}
}
class Observer implements SplObserver {
public function update(SplSubject $subject) {
var_dump ( "最后更新时间为:" . $subject->getValue () );
}
} date_default_timezone_get ( 'Asia/Shanghai' ); error_reporting ( E_ALL );
$subject = new Subject ();
$observer = new Observer ();
$subject->attach ( $observer );
$subject->setValue ( date( 'Y-m-d H:i:s' ), time () );

二 .自定义观察者模式

<?php
class order { protected $observers = array(); // 存放观察容器 //观察者新增
public function addObServer($type, $observer) { $this->observers[$type][] = $observer;
} //运行观察者
public function obServer($type) {
if (isset($this->observers[$type])) {
foreach ($this->observers[$type] as $obser) {
$a = new $obser;
$a->update($this); //公用方法
}
}
} //下单购买流程
public function create() {
echo '购买成功';
$this->obServer('buy'); // buy动作
}
} class orderEmail {
public static function update($order) {
echo '发送购买成功一个邮件';
}
}
class orderStatus {
public static function update($order) {
echo '改变订单状态';
}
}
$ob = new order;
$ob->addObServer('buy', 'orderEmail');
$ob->addObServer('buy', 'orderStatus');
$ob->create();
上一篇:Mui实现退出登录


下一篇:02_使用WebMagic爬虫获取CSDN推荐专家的个人博客信息