概念
又名:发布-订阅模式,模型-视图模式,源-收听者模式,从属模式;
一个目标物件管理所有相依于它的观察者物件,并且在它本身的状态改变时候主动发送通知。
通常用户实现事件处理系统
观察者模式定义对象的一对多依赖,这样一来,当一个对象改变状态时,
它的所有依赖者都会收到通知并自动更新!
应用场景
示例
<?php
class user implements SplSubject{
public $lognum;
public $hobby;
protected $observer = null;
public function __construct($hobby){
$this->lognum = rand(1, 10);
$this->hobby = $hobby;
$this->observer = new SplObjectStorage();
}
public function login(){
$this->notify();
}
public function attach(SPLObserver $observer) {
$this->observer->attach($observer);
}
public function detach(SPLObserver $observer) {
$this->observer->detach($observer);
}
public function notify() {
$this->observer->rewind();
while($this->observer->valid()){
$observer = $this->observer->current();
$observer->update($this);
$this->observer->next();
}
}
}
class security implements SplObserver{
public function update(SplSubject $subject){
if($subject->lognum < 3){
echo '这是第几次'.$subject->lognum.'次登录';
}else{
echo '这是第几次'.$subject->lognum.'次登录异常';
}
}
}
class ad implements SplObserver{
public function update(SplSubject $subject){
if($subject->hobby == 'sports'){
echo '篮球比赛';
} else{
echo '好好学习';
}
}
}
$user = new user('sports');
$user->attach(new security());
$user->attach(new ad());
$user->login();