10
2014-07

PHP 观察者模式 PHP SplSubject SplObserver 接口实现

       最近在看一些PHP观察者模式的东西,因为要做的一个项目需要用到观察者模式,那么什么是观察者模式呢,如何使用观察者模式呢?

       其实观察者模式这是一种较为容易去理解的一种模式吧,它是一种事件系统,意味着这一模式允许某个类观察另一个类的状态,当被观察的类状态发生改变的时候,观察类可以收到通知并且做出相应的动作。比如键盘,我一敲击,系统就收到通知并进行相应的回应。对于PHP来说,PHP内置提供了两个接口来供外部应用区实现这个模式。SplSubject 接口,它代表着被观察的对象,其结构如下:

<?php
interface SplSubject{
    public function attach(SplObserver $observer);//注册成为观察者
    public function detach(SplObserver $observer);//删除观察者
    public function notify();//当被观察对象信息改变时,通知观察者
}
?>

SplObserver 接口,它代表着充当观察者的对象,其结构如下:

<?php
interface SplObserver{ 
    public function update(SplSubject $subject);//更新对象数据
}
?>

这一个模式是这样实现的。SplSubject维护了一个特定的状态,当这个状态发生变化时,它就用notify()来通知之前用attach注册到SplSubject的所有SplObserver,并且调用其相应的update方法。
简单的例子:

<?php
class subject implements SplSubject
{
    private $observers , $value;
    public function __construct()
    {
        $this->observers = array();                 
    }              
    public function attach(SplObserver $observer)
    {
        $this->observers[] = $observer;
    }              
    public function detach(SplObserver $observer)
    {                     
        if($idx = array_search($observer, $this->observers, true)) 
        {                            
            unset($this->observers[$idx]);                          
        }              
    }              
    public function notify()
    {                     
        foreach($this->observers as $observer)
        {                            
            $observer->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)
    {                     
        echo 'The new state of subject'.$subject->getValue();               
    }           
}        
$subject = new subject();       
$observer = new observer();       
$subject->attach($observer);       
$subject->setValue(5);



除非注明,文章均为史亚永原创,欢迎转载!转载请注明本文地址,谢谢。

本文地址:http://www.shiyayong.cn/post/266.html

评论列表:

14  五常大米  2015-7-28 17:46:53 回复该留言  IP:123.121.43.5
写的很详细
五常大米
13  IT博客  2014-12-10 19:24:11 回复该留言  IP:117.140.243.187
IT从业者眼睛疲劳保健措施http://xiaoxiaomayi.com/reed/136.html,小小蚂蚁博客推荐,支持博主,很给力的博客,加油,多多交流
IT博客
12  走阻着  2014-11-3 20:50:09 回复该留言  IP:218.85.249.19
要说我这两天的无聊状态就是睡完觉从下午四点左右一直吃到7点吧甜的辣的咸的冷的热的酸的甜的水果零食面包酸奶热菜卤菜根本停不下来所以大姨妈也怕来了
http://www.trvvv.com/baichi.html
走阻着
11  运气不好怎么转运  2014-11-2 0:04:53 回复该留言  IP:111.201.147.176
又来看你了
运气不好怎么转运
10  骑行士吧  2014-10-26 11:09:49 回复该留言  IP:14.148.156.88
php啊,不同模式接口应该不同吧。
骑行士吧
9  楚狂人  2014-8-22 15:49:05 回复该留言  IP:221.3.44.167
不错的分享
楚狂人
8  旗袍  2014-8-21 12:23:08 回复该留言  IP:27.154.14.115
这一个模式是这样实现的
旗袍
7  高压喷涂机  2014-8-14 23:01:28 回复该留言  IP:58.53.74.166
很不错哦,赞个
高压喷涂机
6  Nhzy资讯君  2014-8-10 0:20:07 回复该留言  IP:14.145.147.66
博主是程序员吧
Nhzy资讯君
5  上海小额贷款  2014-7-23 13:54:26 回复该留言  IP:101.231.207.198
好多广告联盟图片!!!http://shanghai.yiqirong.com/
上海小额贷款
4  夏日博客  2014-7-22 9:33:17 回复该留言  IP:117.79.232.1
观察者模式是什么东东,,MVC架构么。
夏日博客
3  儿童安全座椅  2014-7-17 0:06:10 回复该留言  IP:202.104.170.202
支持下吧
儿童安全座椅
2  旗袍女装  2014-7-14 18:37:43 回复该留言  IP:124.72.89.18
其实观察者模式这是一种较为容易去理解的一种模式吧,它是一种事件系统,意味着这一模式允许某个类观察另一个类的状态,当被观察的类状态发生改变的时候,观察类可以收到通知并且做出相应的动作。http://www.ssnz88.net比如键盘,我一敲击,系统就收到通知并进行相应的回应
旗袍女装
1  杜晓媛  2014-7-11 19:14:34 回复该留言  IP:120.33.39.158
好文章丶不错,希望博主多多分享好的内容,也希望博主有空去我网站玩玩。
杜晓媛去黑头博客http://www.duxiaoyuan.com/qingshuang/
杜晓媛

发表评论:

(设置个性头像)

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。

无觅相关文章插件,快速提升流量