PHP觀察者模式

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

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

EventGenerator.php

<?php
abstract class EventGenerator
{
    //存儲觀察者,因爲可以有多個要通知的對象,所以是一個數組
    private $observers = array();
    //添加觀察者,也就是我想要通知的對象
    public function addObserver($observer)
    {
        $this->observers[] = $observer;
    }
    //通知觀察者
    public function notify()
    {
        //取出所有的對象去執行操作
        foreach($this->observers as $observer)
        {
            //這裏我寫一個update方法,這裏就要求我所有的通知對象必須要有update操作,所以一會我會定義一個藉口,讓所有的觀察者強制實現這個方法
            $observer->update();
        }
    }
}


?>

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

<?php
interface Observer
{
    function update();
}

?>

定義實現觀察者模式的文件Event.php

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

//定義事件類繼承基類
class Event extends EventGenerator
{
    //當觸發這個事件的時候通知所有的觀察者
    public function trigger()
    {
        echo '我要開始更新了啊!<br/>\n';
        //基類的通知方法
        $this->notify();
    }
}
//添加觀察者1
class Observer1 implements Observer
{
    public function update()
    {
        echo '我是觀察者1,我收到你的通知了!我要幹我該乾的了!<br/>\n';
    }
}
//添加觀察者2
class Observer2 implements Observer
{
    public function update()
    {
        echo '我是觀察者2,我收到你的通知了!我要幹我該乾的了!<br/>\n';
    }
}
//下面就要開始測試了!
$event = new Event();
//添加觀察者到這個事件裏
$event->addObserver(new Observer1);
$event->addObserver(new Observer2);
//執行trigger操作
$event->trigger();
//這時候就會顯示!
//我要開始更新了啊!
//我是觀察者1,我收到你的通知了!我要幹我該乾的了!
//我是觀察者2,我收到你的通知了!我要幹我該乾的了!

?>
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章