设计模式之:观察者模式

当对象间存在一对多关系时,则使用观察者模式(Observer Pattern)。比如,当一个对象被修改时,则会自动通知它的依赖对象。观察者模式属于行为型模式。
一个对象对其他依赖的对象的解耦。一般会配合消息队列异步运行,


class Event
{
  function trigger()
  {
     echo "Event update!
"; echo "update1
"; echo "update2
"; // ... } } //使用 $event = new Event; $event->triger();

以前我们会这样写一对多的一个依赖关系。

现在我们改进一下:

abstract class EventGenerator
{
    private $arrObserver = array();
    function addObserver(Observer $observer)
    {
        $this->arrObserver[] = $observer;
    }
    function notify()
    {
        foreach ($this->arrObserver as $observer){
            $observer->index();
        }
    }
}

我们新建一个事件发生器的一个抽象基类。

interface Observer
{
    function index();
}

声明一个观察者的接口

class Observer1 implements Observer{
    function index()
    {
        echo "observer1";
    }
}
class Observer2 implements Observer{
    function index()
    {
        echo "observer2";
    }
}

然后我们编写事件,继承是事件生成器

class Event extends EventGenerator
{
    function trigger()
    {
        echo "Event
"; $this->notify(); } }

使用:

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

$event->trigger();

当我们实例化了事件类,将观察者1和观察者2添加到event的arrObserver数组中管理。
当event触发了notify函数后,遍历arrObserver数组,并且执行约束的Observer接口方法。就实现了观察者模式。

你可能感兴趣的:(设计模式之:观察者模式)