• 周蓬安.blog的博客—强国博客—人民网 2019-05-10
  • 紫光阁中共中央国家机关工作委员会 2019-05-10
  • 感触名家笔下的端午文化吃香粽原来可以这样文艺 2019-05-09
  • 追梦夺冠游行嘲讽詹皇 百万人面前穿订制T恤羞辱他 2019-04-27
  • 《瘟疫传说》:黑死病恐怖 姐弟在绝望中求生 2019-04-10
  • 陕西国防工业职业技术学院百名大学生志愿者敬老院慰问孤寡老人陕西国防工业职业技术学院百名大学生志愿者敬老院慰问-陕西教育新闻 2019-04-08
  • 西藏拉萨:新家园 新生活 2019-04-08
  • 尊重和保障宗教信仰自由的中国实践 2019-04-06
  • 一敬泯恩仇 俄罗斯队主帅这个动作太暖了 2019-03-20
  • 四大名著剧组首次同台忆往事 经典影视剧如何铸就? 2018-12-07
  • “天眼”凝望 探秘宇宙 2018-12-07
  • 1

    PHP观察者模式

    Posted by 撒得一地 on 2016年2月24日 in PHP笔记
    国外稳定加速器推荐    Express | Vypr

    观察者模式(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
    

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

    本文固定地址://www.cfage.com/1625.html,转载请注明出处。

    标签:

    上一篇:

    下一篇:

    相关推荐

    1 Comment

    发表评论

    电子邮件地址不会被公开。 必填项已用*标注

    0 + 0 = ?

    网站地图|广东快乐10分开奖直播

    Copyright © 2015-2019 广东快乐10分开奖直播 All rights reserved.
    闽ICP备15015576号-1,版权所有?psz.

  • 周蓬安.blog的博客—强国博客—人民网 2019-05-10
  • 紫光阁中共中央国家机关工作委员会 2019-05-10
  • 感触名家笔下的端午文化吃香粽原来可以这样文艺 2019-05-09
  • 追梦夺冠游行嘲讽詹皇 百万人面前穿订制T恤羞辱他 2019-04-27
  • 《瘟疫传说》:黑死病恐怖 姐弟在绝望中求生 2019-04-10
  • 陕西国防工业职业技术学院百名大学生志愿者敬老院慰问孤寡老人陕西国防工业职业技术学院百名大学生志愿者敬老院慰问-陕西教育新闻 2019-04-08
  • 西藏拉萨:新家园 新生活 2019-04-08
  • 尊重和保障宗教信仰自由的中国实践 2019-04-06
  • 一敬泯恩仇 俄罗斯队主帅这个动作太暖了 2019-03-20
  • 四大名著剧组首次同台忆往事 经典影视剧如何铸就? 2018-12-07
  • “天眼”凝望 探秘宇宙 2018-12-07
  • qq分分彩是正规开奖吗 安徽时时彩平台注册送钱 北京快乐8全包稳赚法 七乐彩开奖结果今天 湖南体彩幸运赛车销售 如何拓宽彩票销售渠道 快乐12开奖结果走势图 双色球顾庭川17039分析 178彩票图表走势图 七乐彩开奖号码是 3d试机号今天晚上对应 浙江15选5走势图 今年福彩开奖结果查询 新疆福利彩票喜乐彩的介绍 双色球基本走势图 pk10投注技巧论坛