博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
设计模式之观察者模式PHP实现
阅读量:5094 次
发布时间:2019-06-13

本文共 2071 字,大约阅读时间需要 6 分钟。

1、观察者模式:定义了对象之间的一对多依赖,这样一来,当一个对象改变状态时,它的所有依赖者都会收到通知并且有所作为。即出版者+订阅者=观察者模式。

2、例子类图概览:

 

3、假设我们需要实现一个气象台,当气象信息更新时候,通知到每一个布告板上。

(1)我们根据上图将所需接口列出如下:

(2)然后我们实现主题接口如下:

arrObserver[] = $O; } /** * 移除观察对象 * @param Observer $O */ public function removeObserver(Observer $O) { foreach ($this->arrObserver as $key => $o){ if($o == $O){ unset($this->arrObserver[$key]); } } } /** * 通知观察对象更新数据 */ public function notifyObservers() { foreach ($this->arrObserver as $key => $o){ $o->update($this->fltTemperature, $this->fltHumidity, $this->fltPressure); } } /** * 当信息更新时候调用通知接口 */ public function measurementsChange(){ $this->notifyObservers(); } /** * 更新信息 * @param $fltTemperature * @param $fltHumidity * @param $fltPressure */ public function setMeasurements($fltTemperature, $fltHumidity, $fltPressure){ $this->fltTemperature = $fltTemperature; $this->fltHumidity = $fltHumidity; $this->fltPressure = $fltPressure; $this->measurementsChange(); }}

(3)我们再实现观察者接口如下:

fltTemperature = $fltTemperature; $this->fltHumidity = $fltHumidity; $this->fltPressure = $fltPressure; $this->display(); } public function display() { echo "now condition is: temperatur={
$this->fltTemperature}, humidity={
$this->fltHumidity}, pressure={
$this->fltPressure}"; }}
fltTemperature = $fltTemperature; $this->fltHumidity = $fltHumidity; $this->fltPressure = $fltPressure; $this->display(); } public function display() { if($this->fltTemperature > 30 && $this->fltHumidity > 70 && $this->fltPressure > 80){ echo 'it will be hot'; }else{ echo 'it will be cool'; } }}

(4)最后我们对相关接口进行调用输出:

setMeasurements(40,20,50.9);$objWeather->setMeasurements(20,40,30.7);$objWeather->setMeasurements(10,50,60.2);

 

转载于:https://www.cnblogs.com/cfYu/p/10940808.html

你可能感兴趣的文章
上周热点回顾(9.13-9.19)
查看>>
[leetcode] integer break DP算法
查看>>
Altium designer知识总结
查看>>
Windows 7 Shell 命令大名单
查看>>
shell wc -l
查看>>
C#集合之不变的集合
查看>>
前端本质
查看>>
第一章 android系统移植与驱动开发概述
查看>>
php使用curl下载指定大小的文件
查看>>
Task 6.2冲刺会议九 /2015-5-22
查看>>
eclipse实现JavaWeb应用增量打包
查看>>
Java Web之Servlet入门篇(二)
查看>>
Master选举原理
查看>>
AStyle代码格式工具在source insight中的使用
查看>>
Objective-C在ARC下结合GCD的单例模式和宏模版
查看>>
zuul入门(5)zuul 处理异常
查看>>
SpringBoot+Angular2 开发环境搭建
查看>>
net_py_add_conv5_conv6
查看>>
修改idea的运行内存
查看>>
C++编程--类与继承(3)
查看>>