PHP觀察者模式 觀察者模式的缺點 觀察者模式代碼 觀察者模式類

WBOY
發布: 2016-07-29 08:52:56
原創
1104 人瀏覽過

我理解的觀察者模式就是,當我們觸發一個事件的時候,想要把這個操作告訴給我想要告訴的對象,讓他們都執行這個操作,就是將他們綁定到這個事件下。

1.定義一個基類(用於添加觀察者也就是我想要通知的對象,還有通知觀察者)

EventGenerator.php

<code><span><span><?php</span><span>abstract</span><span><span>class</span><span>EventGenerator</span>
{</span><span>//存储观察者,因为可以有多个要通知的对象,所以是一个数组</span><span>private</span><span>$observers</span> = <span>array</span>();
    <span>//添加观察者,也就是我想要通知的对象</span><span>public</span><span><span>function</span><span>addObserver</span><span>(<span>$observer</span>)</span>
    {</span><span>$this</span>->observers[] = <span>$observer</span>;
    }
    <span>//通知观察者</span><span>public</span><span><span>function</span><span>notify</span><span>()</span>
    {</span><span>//取出所有的对象去执行操作</span><span>foreach</span>(<span>$this</span>->observers <span>as</span><span>$observer</span>)
        {
            <span>//这里我写一个update方法,这里就要求我所有的通知对象必须要有update操作,所以一会我会定义一个借口,让所有的观察者强制实现这个方法</span><span>$observer</span>->update();
        }
    }
}


<span>?></span></span></span></code>
登入後複製

接口文件,讓所有觀察者定義update方法Observer.php

<code><span><span><?php</span><span><span>interface</span><span>Observer</span>
{</span><span><span>function</span><span>update</span><span>()</span>;</span>
}

<span>?></span></span></code>
登入後複製

定義實作觀察者模式的檔案Event.php

<code><span><?php</span>
header(<span>'Content-Type:text/html;charset=utf-8'</span>);
define(<span>'BASEDIR'</span>, __DIR___);
<span>require</span><span>'Config.php'</span>;
spl_autoload_register(<span>'Config::autoload'</span>);

<span>//定义事件类继承基类</span><span><span>class</span><span>Event</span><span>extends</span><span>EventGenerator</span>
{</span><span>//当触发这个事件的时候通知所有的观察者</span><span>public</span><span><span>function</span><span>trigger</span><span>()</span>
    {</span><span>echo</span><span>'我要开始更新了啊!<br/>\n'</span>;
        <span>//基类的通知方法</span><span>$this</span>->notify();
    }
}
<span>//添加观察者1</span><span><span>class</span><span>Observer1</span><span>implements</span><span>Observer</span>
{</span><span>public</span><span><span>function</span><span>update</span><span>()</span>
    {</span><span>echo</span><span>'我是观察者1,我收到你的通知了!我要干我该干的了!<br/>\n'</span>;
    }
}
<span>//添加观察者2</span><span><span>class</span><span>Observer2</span><span>implements</span><span>Observer</span>
{</span><span>public</span><span><span>function</span><span>update</span><span>()</span>
    {</span><span>echo</span><span>'我是观察者2,我收到你的通知了!我要干我该干的了!<br/>\n'</span>;
    }
}
<span>//下面就要开始测试了!</span><span>$event</span> = <span>new</span> Event();
<span>//添加观察者到这个事件里</span><span>$event</span>->addObserver(<span>new</span> Observer1);
<span>$event</span>->addObserver(<span>new</span> Observer2);
<span>//执行trigger操作</span><span>$event</span>->trigger();
<span>//这时候就会显示!</span><span>//我要开始更新了啊!</span><span>//我是观察者1,我收到你的通知了!我要干我该干的了!</span><span>//我是观察者2,我收到你的通知了!我要干我该干的了!</span><span>?></span></code>
登入後複製
').addClass('pre-numbering').hide(); $(this).addClass('has-numbering').parent().append($numbering); for (i = 1; i ').text(i)); }; $numbering.fadeIn(1700); }); });

以上就介紹了PHP觀察者模式,包含了觀察者模式,php方面的內容,希望對PHP教學有興趣的朋友有幫助。

相關標籤:
來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板
關於我們 免責聲明 Sitemap
PHP中文網:公益線上PHP培訓,幫助PHP學習者快速成長!