观察者模式的核心是允许你的应用程序注册一个回调,当某个特定的事件发生时便会触发它。实现观察者模式,我们使用一个名为Event的类实现它,这个类有2个公共的方法。

1. registerCallback() :这个方法允许你用规定的名称附加许多回调到一个事件中

2. trigger() :这个方法将会触发刚才命名的事件,并调用该事件已注册的任何回调。

class Event{

static protected $callback = array();

static public function registerCallback($eventName,$callback){

if(!is_callable($callback)){

throw new Exception("Invalid callback");

}

$eventName=strtolower($eventName);

self::$callback[$eventName][]=$callback;

}

static public function trigger($eventName,$data){

$eventName = strtolower($eventName);

if(isset(self::$callback[$eventName])){

foreach(self::$callback[$eventName] as $callback){

$callback($data);

}

}

}

}

注册事件:

class LogCallback{

public function __invoke($data){

echo "Log Data".$data;

echo "__invoke方法使用:当运行脚本试图将对象作为一个方法使用时触发".$data;

}

}

header("Content-Type:text/html; charset=utf-8");

Event::registerCallback('save',new LogCallback());

Event::registerCallback('save',function($data){

echo "匿名函数调用".$data;

echo "接下来触发事件";

});

触发事件:

class MyDataRecord{

public function save(){

Event::trigger('save',"
");

}

}

$evt=new MyDataRecord();

$evt->save();

php观察者模式和注册数模式,PHP观察者模式相关推荐

  1. 观察者模式VS发布订阅模式区别

    观察者模式VS发布订阅模式区别 观察者模式:订阅者收集函数,发布者循环调用 发布订阅:收集发布单独给一个中介 对比 以结构来分辨模式,发布订阅模式相比观察者模式多了一个调度中心: 以意图来分辨模式,都 ...

  2. 慕课网----大话PHP设计模式 三(三种基本设计模式-工厂模式,单例模式,注册树模式)

    1)工厂模式: 工厂方法或者类生成对象,而不是代码中直接new 多用来生成对象 好处.如果很多个文件都使用了这个类的话,如果修改需要去每个文件下都进行修改,而使用工厂模式的话,则只用在类里面修改创建方 ...

  3. java observer模式_Java观察者模式(Observer)详解及应用

    Java观察者模式(Observer)详解及应用 (2011-12-15 14:03:30) 标签: 杂谈 Java观察者模式(Observer)详解及应用 由于网站带有弱sns功能,因此需要设计关注 ...

  4. 发布订阅模式vs观察者模式

    背景 最近在研究react的状态管理器zustand时,研究源码时发现其组件注册绑定是通过观察者模式结合react hooks实现更新的.而联想之前写vue的时候,经常会用到vue内置的自定义事件进行 ...

  5. 设计模式之观察者模式、中介者模式、迭代器模式、访问者模式、备忘录模式、解释器模式

    前言 这是设计模式的最后一章,包含了剩余的 行为型模式 中的 观察者模式.中介者模式.迭代器模式.访问者模式.备忘录模式.解释器模式 系列文章 第一章:7种设计原则之单一职责原则.接口隔离原则.依赖倒 ...

  6. 8-设计模式之行为型模式二(状态模式、观察者模式、中介者模式)

    设计模式之行为型模式二(状态模式.观察者模式.中介者模式) 6.5 状态模式 6.5.1 概述 6.5.2 结构 6.5.3 案例实现 6.5.4 优缺点 6.5.5 使用场景 6.6 观察者模式 6 ...

  7. 行为型模式之观察者模式

    学习设计模式,让你提升百倍 专栏 重点文章 设计模式 设计模式基础前奏(上) 设计模式 设计模式基础前奏(下) 设计模式 创建者模式之单例模式 设计模式 创建者模式之工厂模式 设计模式 创建者模式之原 ...

  8. 深入理解观察者模式与发布订阅模式

    观察者模式与发布订阅模式区别 (全文很长,认真读完相信你会有所收获) 纸上得来终觉浅 观察者模式与发布订阅模式区别 抽象模型 观察者模式 发布-订阅模式 结论 困惑 发布订阅模式?? jQuery的发 ...

  9. 迭代器模式与观察者模式

    迭代器模式与观察者模式 参考教程:https://www.bilibili.com/video/BV1G4411c7N4 代码实现 Github:https://github.com/yaokuku1 ...

最新文章

  1. 精选Python开源项目Top10!
  2. Nginx使用http_accesskey_module防盗链,告别referer,告别伪装
  3. c 自动生成html报告,Pytest框架之 - Allure生成漂亮的HTML图形测试报告
  4. Thymeleaf抽取公共页面片段
  5. JSP门户--JetSpeed
  6. 在VMware 14中安装Centos7
  7. Java缓存框架使用EhCache结合Spring AOP
  8. PAT:1032. Sharing (25) AC
  9. 传销组织生化环材说(正论)
  10. 第十三周项目1-数组大折腾(一)
  11. php抽象类初始化方法,php – 抽象类方法声明
  12. Rust : 求出一个字符串数组中最长的公共连续子序列
  13. 江苏图采上传自定义证件照
  14. linux自动加密软件开发,【天锐绿盾加密软件支持Linux_信息安全管理系统_文件自动加密_文档加密_图纸加密_网络实时监控_网络行为管理_内网安全的软件系统】免费在线试用_文档管理_选软件网...
  15. ASS字幕特效代码个人收藏
  16. js常用正则 验证数字正则
  17. 极路由3(HC5861)刷Padavan固件教程
  18. 见习后的感想之关于献血
  19. java 指纹匹配算法_java – 从生物识别指纹考勤设备中检索数据
  20. java程序员生日祝福语_给朋友过生日的祝福语

热门文章

  1. VUE学习和开发中的注意点总结(一),便于回顾(不断完善补充。)
  2. Dubbo是如何进行远程服务调用的?(源码流程跟踪)
  3. java值传递string_关于java:按值传递(StringBuilder与String)
  4. 四年级计算机笔试题,四年级计算机考试卷.doc
  5. python函数应用_python 函数应用
  6. Linux启动SAP服务,sap启动相关
  7. java volatile lock_Java并发学习笔记 -- Java中的Lock、volatile、同步关键字
  8. c语言验证24点,C语言解24点游戏程序
  9. 不用数组,解决众数问题(前提 :众数出现的次数必须大于n/2)
  10. hashmap hash冲突怎么解决_HashMap原理及冲突之简谈