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脫衣器

Video Face Swap
使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱門文章

熱工具

記事本++7.3.1
好用且免費的程式碼編輯器

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

禪工作室 13.0.1
強大的PHP整合開發環境

Dreamweaver CS6
視覺化網頁開發工具

SublimeText3 Mac版
神級程式碼編輯軟體(SublimeText3)

PHP作為一款流行的後端程式語言,在Web開發領域廣受歡迎。天氣預報功能是常見的Web應用場景,基於PHP實現天氣預報功能相對簡單易懂。本文將介紹如何使用PHP實現天氣預報功能。一、取得天氣資料API要實現天氣預報功能,首先需要取得天氣資料。我們可以使用第三方天氣API來取得即時、準確的天氣資料。目前,國內主流的天氣API供應商包括免費的「心知天氣」和收

如何使用JavaWebSocket實現即時天氣預報功能?隨著網路和行動裝置的普及,即時天氣預報功能成為了許多應用的必備功能之一。而使用JavaWebSocket技術能夠方便快速地實現即時通信,為用戶提供最新的天氣預報資訊。本文將介紹如何使用JavaWebSocket實現即時天氣預報功能,並提供具體的程式碼範例。環境準備在開始之前,需要確保你已經安裝好以

自2021年12月開始華為&榮耀手機上線了萬象桌面小組件的功能。為許多用戶手機桌面添加許多便利功能、視覺優化的桌面控制等等;到今年8月兩大商家平台也開放了運動健康數據、天氣數據、音樂數據、系統數據等等,讓用戶在手機桌面的互動操作更方便快速也具備較多趣味性,讓使用者自己DIY創意組合自己的個性桌面。在添加小組件後的手機桌面最近,許多華為手機用戶反映他們對於如何在華為和榮耀手機上添加桌面小組件的操作方式不太清楚,抱怨這一過程過於復雜和繁瑣。為了幫助大家解決這個問題,錢舒嫻準備了詳細的操作流程,希望能夠

IT之家11月3日消息,Google研究院與DeepMind合作開發了最新的天氣模式MetNet-3,以先前的MetNet和MetNet-2為基礎,能夠提早24小時,能夠對全球天氣狀況進行高解析度預測,包括降水、表面溫度、風速、風向和體感溫度。 IT之家發現,Google提到,MetNet-3模型已經在行動平台的「Google手機軟體」天氣預報中實裝。 MetNet-3模型可創造「平滑且高精度」的預測,空間解析度可達1至4公里,並以2分鐘為分析區間,經實驗證明,MetNet-3的預測能力超越傳統物理天氣預報模型,例如

11月3日消息,Google研究院與DeepMind合作開發了最新的天氣模型MetNet-3,以先前的MetNet和MetNet-2為基礎,能夠提前24小時,能夠對全球天氣狀況進行高分辨率預測,包括降水、表面溫度、風速、風向和體感溫度。本站發現,Google提到,MetNet-3模型已經在行動平台的「Google手機軟體」天氣預報中實裝。 MetNet-3模型可以創造「平滑且高精度」的預測,空間解析度可達1至4公里,並且以2分鐘為分析區間。經過實驗證明,MetNet-3的預測能力超越了傳統的物理天氣預報模型,例如

編輯|ScienceAI大模型時代,純數據驅動的氣象、氣候模型效果逐漸追趕甚至趕超數值模式。然而,現有的氣象氣候大模型仍存在一些問題。例如,模型中的物理一致性還不夠高,這導致了對於複雜的天氣氣候現像如降水的預測能力受限。另外,輻散風的預報效果也不盡人意。這些問題需要進一步的研究和改進,以提高模型的預測精度和可靠性。目前,將物理、大氣動力與深度學習模式結合,是解決瓶頸問題的重要途徑。近日,中國科學院大氣物理研究所黃剛研究員團隊基於地球系統數值模擬裝置(寰)的數據和算力支持,從物理變量耦合關係角

桌面會有一個天氣預報的功能,那麼桌面天氣預報要怎麼恢復呢?使用者需要在桌面裡點選視窗工具,然後點選天氣,選擇一個天氣元件就可以了。這篇桌面天氣預報恢復方法介紹就能告訴大家具體的操作方法,以下就是詳細介紹,趕快看看吧!桌面天氣預報怎麼恢復答:在桌面的小組件裡選擇天氣,然後加入桌面。具體方法:ios方法:1、長按蘋果螢幕,然後點選左上的+號。 2.在裡面搜尋天氣,打開這個應用程式。 3.然後選擇天氣組件的樣式,點選新增小組件。 4.之後點選右上的完成就可以了。安卓方法:1、長按螢幕,點選視窗小工具。 2、點擊天

如何使用Python和百度地圖API取得城市天氣預報資訊?導語:天氣預報對我們的日常生活有著重要的指導作用。本文將介紹如何使用Python程式語言和百度地圖API來獲取城市的天氣預報訊息,從而幫助我們準確地了解天氣狀況。首先,我們需要註冊一個百度開發者帳號並建立一個應用程式。在建立應用程式後,百度將會提供給我們一對APIKey,用於使用百度地圖API的權限認證。接
