PHP设计模式 观察者模式(Observer)

定义

当一个对象状态发生改变时,依赖它的对象全部会收到通知,并自动更新。

模式要点

Event:事件

Trigger() 触发新的事件

abstract EventGenerator 事件产生者

Function addObserver(Observer $observer) 添加事件

Function notify() 通知事件产生了

Interface Observer 观察者

Function update($event_info=null) 执行一些更新的操作

$event_info 事件的一些信息

代码示例

<?php
/**
 * 观察者模式
 * User: pyzn
 * Date: 2016-03-21
 * Time: 17:35
 */

/**
 * Class EventGenerator
 * 观察者模式的核心,主要是对事件进行约束,保证事件中存在addObserver、notify方法
 */
abstract class EventGenerator
{
    private $observers = array();

    public function addObserver(Observer $observer)
    {
        $this->observers[] = $observer;
    }

    public function notify()
    {
        foreach ($this->observers as $observer)
        {
            $observer->update();
        }
    }
}

/**
 * Class Event 具体事件类,这里映射程序中增加的某个事件
 * 其继承自事件产生者基类
 */
class Event extends EventGenerator
{

    /**
     * 执行一个事件,并进行通知
     */
    public function trigger()
    {
        echo "事件发生<br />";

        $this->notify();
    }
}


/**
 * Interface Observer
 * 对事件进行约束,保证事件中有update操作方法
 */
interface Observer
{
    function update($event_info = null);
}

class Observer1 implements Observer
{
    function update($event_info = null)
    {
        // TODO: Implement update() method.
        echo "逻辑1<br />";
    }
}

class Observer2 implements Observer
{
    function update($event_info = null)
    {
        // TODO: Implement update() method.
        echo "逻辑2<br />";
    }
}

$event = new Event();

$event->addObserver(new Observer1());
$event->addObserver(new Observer2());

$event->trigger();
posted @ 2016-03-22 11:49  pyzn  阅读(435)  评论(0编辑  收藏  举报