PHP观察者模式

其实不用刻意去学习模式,我们平常看代码,写代码的过程中已经接触或使用过不少设计模式,只是我们不知道罢了。但是我们仍然需要了解一下书上的说法,对比印证一下,加深理解。

本文说的是设计模式:观察者模式

根据字面意思理解,我们知道关键字是“观察”两个字,这是一个动词,那么就需要有"被观察者"和"观察者"。

举个栗子:

公司有一台很重要的线上服务器,以及一个运维部门,为了保障产品的稳定,我们要求当服务器运行异常的时候自动向运维部门每个相关负责人发送邮件或短信报警。

在这个例子里,服务器就相当于被观察者,而运维负责人都是观察者,

那么我们通过代码来说明吧:

1//运行的服务 2class Server{ 3 private $_watcher;//观察者列表 4 5 //添加一个观察者 6 function attachWatcher(Watcher $watcher){ 7 $this->_watcher[] = $watcher; 8 } 9 10 function run(){ 11 //.....假设发生异常 12 13 $this->notify(); 14 15 } 16 17 function notify(){ 18 //通知观察者“出事了” 19 foreach($this->_watcher as $watcher){ 20 $watcher->update(); 21 } 22 exit;//中断程序或者跳过错误等其他逻辑 23 } 24 25} 26 27//观察者接口 28abstract class Watcher { 29 public function update(); 30} 31 32//观察者A 33class WatcherA extends Watcher { 34 function update() { 35 //发送短信到手机 36 } 37} 38 39//观察者B 40class WatcherB extends Watcher { 41 function update() { 42 //发送邮件通知 43 } 44} 45 46$server = new Server(); 47$server->attachWatcher(new WatcherA());//添加一个观察者A(运维A) 48$server->attachWatcher(new WatcherB());//添加一个观察者B(运维B) 49$server->run();//启动服务

代码比较简单,只是说明一下机制。

等等,这怎么跟我们平时所接触的"事件机制"很像?我觉得事件机制就是对观察者模式的进一步扩展。

点赞
收藏

评论区

加载中...

相关推荐

MySQL:[Err] 1292 - Incorrect datetime value: ‘0000-00-00 00:00:00‘ for column ‘CREATE_TIME‘ at row 1

文章目录问题用navicat导入数据时,报错:原因这是因为当前的MySQL不支持datetime为0的情况。解决修改sql\mode:sql\mode:SQLMode定义了MySQL应支持的SQL语法、数据校验等,这样可以更容易地在不同的环境中使用MySQL。全局s

Oracle 分组与拼接字符串同时使用

SELECTT.,ROWNUMIDFROM(SELECTT.EMPLID,T.NAME,T.BU,T.REALDEPART,T.FORMATDATE,SUM(T.S0)S0,MAX(UPDATETIME)CREATETIME,LISTAGG(TOCHAR(

皕杰报表之UUID

​在我们用皕杰报表工具设计填报报表时,如何在新增行里自动增加id呢?能新增整数排序id吗?目前可以在新增行里自动增加id,但只能用uuid函数增加UUID编码,不能新增整数排序id。uuid函数说明:获取一个UUID,可以在填报表中用来创建数据ID语法:uuid()或uuid(sep)参数说明:sep布尔值,生成的uuid中是否包含分隔符'',缺省为

手写Java HashMap源码

HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程22

java设计模式详细讲解

原文链接:java设计模式详细讲解观察者模式(https://www.oschina.net/action/GoToLink?urlhttps%3A%2F%2Fwww.blogchina.cn%2Fblog%2Fguopengfei%2Fhome%2F270%2F1575725711626"java设计模式详细讲解观察者模式")如果想要更加

简说设计模式——观察者模式

一、什么是观察者模式  观察者一般可以看做是第三者,比如在学校上自习的时候,大家肯定都有过交头接耳、各种玩耍的经历,这时总会有一个“放风”的小伙伴,当老师即将出现时及时“通知”大家老师来了。再比如,拍卖会的时候,大家相互叫价,拍卖师会观察最高标价,然后通知给其它竞价者竞价,这就是一个观察者模式。  对于观察者模式而言,肯定有观察

PHP观察者模式 - HelloWorld