php中的设计模式之--观察者模式
<?php /** 1. 概述 又称为发布-订阅(Publish-Subscribe)模式、模型-视图(Model-View)模式、源-监听(Source-Listener)模式、或从属者(Dependents)模式 2. 解决的问题 将一个系统分割成一个一些类相互协作的类有一个不好的副作用,那就是需要维护相关对象间的一致性。我们不希望为了维持一致性而使各类紧密耦合,这样会给维护、扩展和重用都带来不便。观察者就是解决这类的耦合关系的。 3. 模式中的角色 3.1 抽象主题(Subject):它把所有观察者对象的引用保存到一个聚集里,每个主题都可以有任何数量的观察者。抽象主题提供一个接口,可以增加和删除观察者对象。 3.2 具体主题(ConcreteSubject):将有关状态存入具体观察者对象;在具体主题内部状态改变时,给所有登记过的观察者发出通知。 3.3 抽象观察者(Observer):为所有的具体观察者定义一个接口,在得到主题通知时更新自己。 3.4 具体观察者(ConcreteObserver):实现抽象观察者角色所要求的更新接口,以便使本身的状态与主题状态协调。 4 . 简单的来说观察者模式有两个角色(主题和观察者),其中主题可以理解万为被观察者; 如果主题发生变化,就会通知观察者,观察者就会更新自己; 举例说明 ,花(具体对象,或者被观察者) 养花的人就是观察者,如果花发生变化(叶子枯萎需要浇水),观察者就会做出反应浇花; */ //(1)抽象主题(Subject) interface Subject { // 添加观察者 public function attach(Observer $observer) ; // 删除观察者 public function detach(Observer $observer); // 向观察者(们)发出通知 public function notify(); } // (2) 抽象观察者 interface Observer{ // 更新方法 public function dosometing(); } // 具体的花作为主体 class Flower implements Subject{ // 此为所有的观察者对象数组 private $observers = NULL ; // 添加观察者(看花的人) public function attach(Observer $observer) { $this->observers[] = $observer ; } // 删除观察者 (看花的人) public function detach(Observer $observer){ if(in_array($observer,$this->observers)){ $index = array_search($observer, $this->observers); unset($this->observers[$index]); return TRUE; } return false; } // 向观察者(们)发出通知 public function notify(){ foreach($this->observers as $observer){ $observer->dosometing(); } } } // 具体的人 class LoveFlowerPerson implements Observer{ private $name ; function __construct($sName){ $this->name =$sName ; } public function dosometing(){ echo $this->name.'浇花 '; } } /* 添加第一个观察者花农 */ $subject = new Flower(); $observer1 = new LoveFlowerPerson('wlt'); $subject->attach($observer1); <pre class="code">/* 添加第二个观察者花农 */$observer2 = new LoveFlowerPerson('wlb');$subject->attach($observer2);$subject->notify(); // 主题变化,通知观察者echo '删除掉一个花农
'; $subject->detach($observer2);$subject->notify(); // 主题变化,通知观察者
陳述
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn

熱AI工具

Undresser.AI Undress
人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover
用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

AI Hentai Generator
免費產生 AI 無盡。

熱門文章
R.E.P.O.能量晶體解釋及其做什麼(黃色晶體)
3 週前By尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.最佳圖形設置
3 週前By尊渡假赌尊渡假赌尊渡假赌
刺客信條陰影:貝殼謎語解決方案
2 週前ByDDD
R.E.P.O.如果您聽不到任何人,如何修復音頻
3 週前By尊渡假赌尊渡假赌尊渡假赌
WWE 2K25:如何解鎖Myrise中的所有內容
3 週前By尊渡假赌尊渡假赌尊渡假赌

熱工具

MantisBT
Mantis是一個易於部署的基於Web的缺陷追蹤工具,用於幫助產品缺陷追蹤。它需要PHP、MySQL和一個Web伺服器。請查看我們的演示和託管服務。

Dreamweaver Mac版
視覺化網頁開發工具

ZendStudio 13.5.1 Mac
強大的PHP整合開發環境

MinGW - Minimalist GNU for Windows
這個專案正在遷移到osdn.net/projects/mingw的過程中,你可以繼續在那裡關注我們。 MinGW:GNU編譯器集合(GCC)的本機Windows移植版本,可自由分發的導入函式庫和用於建置本機Windows應用程式的頭檔;包括對MSVC執行時間的擴展,以支援C99功能。 MinGW的所有軟體都可以在64位元Windows平台上運作。

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