PHP设计模式-观察者
一个对象状态发生改变后,会影响到其他几个对象的改变,这时候可以用观察者模式。一个对象通过添加一个attach方法允许观察者注册自己,使本身变得可观察。当被观察的对象更改时,它会将消息发送到已注册的观察者。观察者使用该信息执行的操作与被观察的对象无关。观察者模式是一种事件系统,意味着这一模式允许某些类通过观察被观察类的状态变化,做出相应的动作。
观察者模式UML图
php5中提供了观察者observer与被观察者subject接口
interface SplSubject
{
function attach(SplObserver $observer);
function detach(SplObserver $observer);
function notify();
}
interface SqlObserver
{
function update(SplSubject $subject);
}
<?php
class user implements SplSubject{
public $lognum;
public $hobby;
protected $observers;
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){
}else{
}
}
}
class ad implements SPLObserver{
public function update(SplSubject $subject){
if($subject->hobby=="sports"){
}else{
}
}
}
//实施观察
$user= new user("sports");
$user->attach(new secrity());
$user->attach(new ad());
$user->login();
?>
亿速云「云服务器」,即开即用、新一代英特尔至强铂金CPU、三副本存储NVMe SSD云盘,价格低至29元/月。点击查看>>
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。