Head First-观察者模式,headfirst-观察者_PHP教程
Head First-观察者模式,headfirst-观察者
什么是观察者模式?观察者模式定义了对象之间一对多的关系。
观察者模式中有主题(即可观察者)和观察者。主题用一个共同的接口来通知观察者,主题不知道观察者的细节,只知道观察者实现了主题的接口。
普遍的观察者模式中的推的方式更适合点,下面我们就写一个推的例子,天气站提供一个接口,当天气变化时,会将数据通知给各个看板显示。
<?php //使用接口,类必须实现几个功能注册,删除,通知这几个动作 interface Subject{ public function registerObserver(Observer $o); public function removeObserver(Observer $o); public function notifyObservers(); } interface Observer{ public function update($a,$b,$c); } //各个面板不同将改行为以接口实现 interface DisplayElement{ public function display(); } class Weather implements Subject{ public $observers; public $changed=false; public $a; public $b; public $c; public function __construct(){ $this->observers = array(); } public function registerObserver(Observer $o){ $this->observers[] = $o; } public function removeObserver(Observer $o){ $key = array_search($o,$this->observers); if($key!==false){ unset($this->observers[$key]); } } public function notifyObserver(){ if($this->changed){ foreach($this->observer as $ob){ $ob->update($this->a,$this->b,$this->c); } } } public function setChanged(){ $this->changed = true; } //当数值改变时通知各个观察者 public function measurementsChanged(){ $this->setChanged(); $this->notifyObserver(); } public function setMeasurements($a,$b,$c){ $this->a = $a; $this->b = $b; $this->c = $c; $this->measurementsChanged(); } } class CurrentConditionsDisplay implements Observer, DisplayElement{ public $a; public $b; public $c; public $subject; public function __construct(Subject $weather){ $this->subject = $weather; $this->subject->registerObserver($this); } public function update($a,$b,$c){ $this->a = $a; $this->b = $b; $this->c = $c; $this->display(); } public function display(){ echo $this->a.$this->b.$this->c; } } ?>
我们在这些对象之间用松耦合的方式进行沟通,这样我们在后期维护的时候,可以大大的提高效率。
设计原则:找出程序中会变化的方面,然后将其进行分离;针对接口编程,不针对实现编程;多用组合,少用继承

热AI工具

Undresser.AI Undress
人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover
用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool
免费脱衣服图片

Clothoff.io
AI脱衣机

AI Hentai Generator
免费生成ai无尽的。

热门文章

热工具

记事本++7.3.1
好用且免费的代码编辑器

SublimeText3汉化版
中文版,非常好用

禅工作室 13.0.1
功能强大的PHP集成开发环境

Dreamweaver CS6
视觉化网页开发工具

SublimeText3 Mac版
神级代码编辑软件(SublimeText3)

热门话题

PHP作为一款流行的后端编程语言,在Web开发领域广受欢迎。天气预报功能是一种常见的Web应用场景,基于PHP实现天气预报功能相对简单易懂。本文将介绍如何使用PHP实现天气预报功能。一、获取天气数据API要实现天气预报功能,首先需要获取天气数据。我们可以使用第三方天气API来获取实时、准确的天气数据。目前,国内主流的天气API供应商包括免费的“心知天气”和收

自2021年12月开始华为&荣耀手机上线了万象桌面小组件的功能。为诸多用户手机桌面添加很多便捷功能、视觉优化的桌面控件等等;到今年8月两大商家平台也开放了运动健康数据、天气数据、音乐数据、系统数据等等,让用户在手机桌面的交互操作更加方便快捷还具备较多趣味性,让用户自己DIY创意组合自己的个性桌面。添加小组件后的手机桌面最近,许多华为手机用户反映他们对于如何在华为和荣耀手机上添加桌面小组件的操作方式不太清楚,抱怨这一过程过于复杂和繁琐。为了帮助大家解决这个问题,钱舒娴准备了详细的操作流程,希望能够

如何使用JavaWebSocket实现实时天气预报功能?随着互联网和移动设备的普及,实时天气预报功能成为了许多应用的必备功能之一。而使用JavaWebSocket技术能够方便快捷地实现实时通信,为用户提供最新的天气预报信息。本文将介绍如何使用JavaWebSocket实现实时天气预报功能,并提供具体的代码示例。环境准备在开始之前,需要确保你已经安装好以

IT之家11月3日消息,谷歌研究院与DeepMind合作开发了最新的天气模型MetNet-3,该模型以之前的MetNet和MetNet-2为基础,能够提前24小时,能够对全球天气情况进行高解析度预测,包括降水、表面温度、风速、风向和体感温度。IT之家发现,谷歌提到,MetNet-3模型已经在移动平台的“谷歌手机软件”天气预报中实装。MetNet-3模型可创建“平滑且高精度”的预测,空间解析度可达1至4公里,并以2分钟为分析区间,经实验证明,MetNet-3的预测能力超越传统物理天气预报模型,例如

11月3日消息,谷歌研究院与DeepMind合作开发了最新的天气模型MetNet-3,该模型以之前的MetNet和MetNet-2为基础,能够提前24小时,能够对全球天气情况进行高解析度预测,包括降水、表面温度、风速、风向和体感温度。本站发现,谷歌提到,MetNet-3模型已经在移动平台的“谷歌手机软件”天气预报中实装。MetNet-3模型可以创建“平滑且高精度”的预测,空间分辨率可以达到1至4公里,并且以2分钟为分析区间。经过实验证明,MetNet-3的预测能力超越了传统的物理天气预报模型,例

桌面会有一个天气预报的功能,那么桌面天气预报怎么恢复呢?用户们需要在桌面里点击窗口工具,然后点击天气,选择一个天气组件就可以了。这篇桌面天气预报恢复方法介绍就能告诉大家具体的操作方法,下面就是详细介绍,赶紧看看吧!桌面天气预报怎么恢复答:在桌面的小组件里选择天气,然后添加到桌面。具体方法:ios方法:1、长按苹果屏幕,然后点击左上的+号。2、在里面搜索天气,打开这个应用。3、然后选择天气组件的样式,点击添加小组件。4、之后点击右上的完成就可以了。安卓方法:1、长按屏幕,点击窗口小工具。2、点击天

编辑|ScienceAI大模型时代,纯数据驱动的气象、气候模型效果逐渐追赶甚至赶超数值模式。然而,现有的气象气候大模型仍然存在一些问题。例如,模型中的物理一致性还不够高,这导致了对于复杂的天气气候现象如降水的预测能力受限。另外,辐散风的预报效果也不尽如人意。这些问题需要进一步的研究和改进,以提高模型的预测精度和可靠性。目前,将物理、大气动力与深度学习模型结合,是解决瓶颈问题的重要途径。近日,中国科学院大气物理研究所黄刚研究员团队基于地球系统数值模拟装置(寰)的数据和算力支持,从物理变量耦合关系角

如何使用Python和百度地图API获取城市天气预报信息?导语:天气预报对我们的日常生活起着重要的指导作用。本文将介绍如何使用Python编程语言和百度地图API来获取城市的天气预报信息,从而帮助我们准确地了解天气情况。首先,我们需要注册一个百度开发者账号并创建一个应用。在创建应用后,百度将会提供给我们一对APIKey,用于使用百度地图API的权限认证。接
