美文网首页
php设计模式——观察者模式

php设计模式——观察者模式

作者: 胡木木OvO | 来源:发表于2020-05-25 09:47 被阅读0次

观察者模式

  • 观察者模式(Observer),当一个对象的状态发生改变时,依赖他的对象会全部收到通知,并自动更新。

  • 场景:一个事件发生后,要执行一连串更新操作.传统的编程方式,就是在事件的代码之后直接加入处理逻辑,当更新得逻辑增多之后,代码会变得难以维护.这种方式是耦合的,侵入式的,增加新的逻辑需要改变事件主题的代码。

  • 观察者模式实现了低耦合,非侵入式的通知与更新机制。

  • 代码

    • 基类 EventGenerator

       <?php 
       namespace Test;
       /**
        * 事件产生类
        * Class EventGenerator
        */
       abstract class EventGenerator
       {
           private $ObServers = [];
       
           //增加观察者
           public function add(ObServer $ObServer)
           {
               $this->ObServers[] = $ObServer;
           }
       
           //事件通知
           public function notify()
           {
               foreach ($this->ObServers as $ObServer) {
                   $ObServer->update();
               }
           }
       
       }
      
    • 接口类 ObServer

      <?php 
       namespace Test;
      /**
       * 观察者接口类
       * Interface ObServer
       */
      interface ObServer
      {
          public function update($event_info = null);
      }
      
    • 观察者1

      <?php 
      namespace Test;
      /**
       * 观察者1
       */
      class ObServer1 implements ObServer
      {
          public function update($event_info = null)
          {
              echo "观察者1 收到执行通知 执行完毕!\n";
          }
      }
      
    • 观察者2

       <?php 
             namespace Test;
      /**
       * 观察者1
       */
      class ObServer1 implements ObServer
      {
          public function update($event_info = null)
          {
              echo "观察者1 收到执行通知 执行完毕!\n";
          }
      }
      
    • 事件

      <?php 
      namespace Test;
      /**
      * 事件
      * Class Event
      */
      class Event extends EventGenerator
      {
         /**
          * 触发事件
          */
         public function trigger()
         {
             //通知观察者
             $this->notify();
         }
      }
      
      //创建一个事件
      $event = new Event();
      //为事件增加旁观者
      $event->add(new ObServer1());
      $event->add(new ObServer2());
      //执行事件 通知旁观者
      $event->trigger();
      

相关文章

网友评论

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

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