您当前的位置: 首页 > 学无止境 > 心得笔记 网站首页心得笔记
设计模式-PHP实现观察者模式
发布时间:2017-11-30 09:17:06编辑:雪饮阅读()
<?php
//被观察者
class user implements SplSubject{
//登录次数
public $lognum;
//爱好
public $hobby;
//观察者的被观察者容器
protected $observers=null;
public function __construct($hobby){
$this->lognum=rand(1,10);
$this->hobby=$hobby;
$this->observers=new SplObjectStorage();
}
public function login(){
$this->notify();
}
//添加观察者到观察者容器的方法
public function attach(SPLObserver $observer){
$this->observers->attach($observer);
}
//从观察者容器中删除某个观察者的方法
public function detach(SPLObserver $observer){
$this->observers->detach($observer);
}
//通知每个观察者
public function notify(){
$this->observers->rewind();
while($this->observers->valid()){
$observer=$this->observers->current();
$observer->update($this);
$this->observers->next();
}
}
}
//负责安全部门的观察者
class secrity implements SPLObserver{
public function update(SplSubject $subject){
if($subject->lognum<3){
echo '这是第'.$subject->lognum.'次安全登录<br/>';
}
else{
echo '这是第'.$subject->lognum.'次登录,登录异常<br/>';
}
}
}
//负责广告部门的观察者
class ad implements SPLObserver{
public function update(SplSubject $subject){
if($subject->hobby=='sports'){
echo '捷安特(GIANT) Giant捷安特ARX 2山地车27.5轮径24速 白月光 M,满300减20';
}
else{
echo '2014年最新燕十八老师PHP视频教程10K月薪高性能架构班.屌丝逆袭就等你来。';
}
}
}
//实施观察
$user=new user('study');
$user->attach(new secrity());
$user->attach(new ad());
$user->login();
?>
关键字词:php,观察者,设计模式
上一篇:linux查找删除命令
下一篇:设计模式-策略模式