1

PHP观察者模式

Posted by 撒得一地 on 2016年2月24日 in PHP笔记

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

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

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

观察者模式UML图:

PHP观察者模式

下面先介绍传统的事件更新通知的实现操作。

class Event
{
  function trigger()
  {
     echo "Event update!<br/>";

     //具体更新逻辑
     echo "update1<br/>";
     echo "update2<br/>";
      // ...
  }
}
$event = new Event;
$event->triger();

这种方法的坏处是当更新通知逻辑越来越多时,trigger方法的代码就会越变越多,越来越复杂,不易维护。而且这种方法,事件和更新机制是耦合在一起的。其实,事件和更新操作本是不一样的业务模块,这种方法属于侵入式的编程方法。

下面介绍低耦合的观察者模式的具体实现方法:

//声明一个抽象的事件发生者基类
abstract class EventGenerator{
    private $observers = array();

    //添加观察者方法
    function addobserver(Observer $observer)
    {
        $this->observers[] = $observer;
    }

    //对每个添加的观察者进行事件通知
    function notify()
    {
       //对每个观察者逐个去更新
       foreach($this->observers as $observer)
       {
         $observer->update();
       }
    }
}
//声明一个观察者接口
interface observer
{
   function update($event_info = null);
}
//声明具体事件类,继承了主事件
class Event extends EventGenerator
{
   function trigger()
   {
      echo "Event<br/>";
      $this->notify();
   }
}
//声明多个观察者
class Observer1 implements observer
{
   function update($event_info = null)
   {
      echo "逻辑1<br/>"; 
   }
}

class Observer2 implements observer
{
   function update($event_info = null)
   {
      echo "逻辑2<br/>"; 
   }
}

//...更多的观察者类
//主逻辑代码
$event = new Event;
$event->addObserver(new Observer1);
$event->addObserver(new Observer2);
$event->trigger();

输出结果:

Event
逻辑1
逻辑2

观察者模式的方法使得事件和更新操作很好的进行了分离,使两者实现了低耦合。而且很容易动态的添加和删除某一项观察者逻辑操作。

本文固定地址:http://coderschool.cn/1625.html,转载请注明出处。

标签:

上一篇:

下一篇:

相关推荐

1 Comment

Comments are closed. Would you like to contact the author directly?
网站地图|XML地图

Copyright © 2015-2024 技术拉近你我! All rights reserved.
闽ICP备15015576号-1 版权所有©psz.