设计模式之:观察者模式

2018-05-03  本文已影响0人  hankviv

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


class Event
{
  function trigger()
  {
     echo "Event update!<br/>";
     echo "update1<br/>";
     echo "update2<br/>";
      // ...
  }
}
//使用
$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<b>";
    }
}
class Observer2 implements Observer{
    function index()
    {
        echo "observer2<b>";
    }
}

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

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

使用:

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

$event->trigger();

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

上一篇 下一篇

猜你喜欢

热点阅读