美文网首页
设计模式之:观察者模式

设计模式之:观察者模式

作者: hankviv | 来源:发表于2018-05-03 20:21 被阅读0次

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

    相关文章

      网友评论

          本文标题:设计模式之:观察者模式

          本文链接:https://www.haomeiwen.com/subject/ipblrftx.html