设计模式之:观察者模式

当对象间存在一对多关系时,则使用观察者模式(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接口方法。就实现了观察者模式。

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容