Rumah pembangunan bahagian belakang tutorial php php中的设计模式之观察者模式

php中的设计模式之观察者模式

Jun 23, 2016 pm 01:39 PM

<?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-&gt;observers)){			$index = array_search($observer, $this-&gt;observers);		    unset($this-&gt;observers[$index]);            return TRUE;		}		return false; 			}	//	向观察者(们)发出通知	public function notify(){				foreach($this-&gt;observers as $observer){			$observer-&gt;dosometing(); 		}	}	}// 具体的人 class LoveFlowerPerson implements Observer{	 private $name  ;		 function __construct($sName){		 $this-&gt;name =$sName ;	 }	 public function dosometing(){		 	  echo  $this-&gt;name.'浇花  ';			 }	 }/* 添加第一个观察者花农 */$subject = new Flower();$observer1 = new LoveFlowerPerson('wlt');$subject-&gt;attach($observer1);<pre name="code" class="php">/* 添加第二个观察者花农 */
Salin selepas log masuk
$observer2 = new LoveFlowerPerson('wlb');$subject->attach($observer2);$subject->notify(); // 主题变化,通知观察者echo '删除掉一个花农
'; $subject->detach($observer2);$subject->notify(); // 主题变化,通知观察者
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn

Tag artikel panas

Notepad++7.3.1

Notepad++7.3.1

Editor kod yang mudah digunakan dan percuma

SublimeText3 versi Cina

SublimeText3 versi Cina

Versi Cina, sangat mudah digunakan

Hantar Studio 13.0.1

Hantar Studio 13.0.1

Persekitaran pembangunan bersepadu PHP yang berkuasa

Dreamweaver CS6

Dreamweaver CS6

Alat pembangunan web visual

SublimeText3 versi Mac

SublimeText3 versi Mac

Perisian penyuntingan kod peringkat Tuhan (SublimeText3)

11 skrip pemendek URL terbaik PHP (percuma dan premium) 11 skrip pemendek URL terbaik PHP (percuma dan premium) Mar 03, 2025 am 10:49 AM

11 skrip pemendek URL terbaik PHP (percuma dan premium)

Pengenalan kepada API Instagram Pengenalan kepada API Instagram Mar 02, 2025 am 09:32 AM

Pengenalan kepada API Instagram

Bekerja dengan Data Sesi Flash di Laravel Bekerja dengan Data Sesi Flash di Laravel Mar 12, 2025 pm 05:08 PM

Bekerja dengan Data Sesi Flash di Laravel

Respons HTTP yang dipermudahkan dalam ujian Laravel Respons HTTP yang dipermudahkan dalam ujian Laravel Mar 12, 2025 pm 05:09 PM

Respons HTTP yang dipermudahkan dalam ujian Laravel

Curl dalam PHP: Cara Menggunakan Pelanjutan PHP Curl dalam API REST Curl dalam PHP: Cara Menggunakan Pelanjutan PHP Curl dalam API REST Mar 14, 2025 am 11:42 AM

Curl dalam PHP: Cara Menggunakan Pelanjutan PHP Curl dalam API REST

Bina aplikasi React dengan hujung belakang Laravel: Bahagian 2, React Bina aplikasi React dengan hujung belakang Laravel: Bahagian 2, React Mar 04, 2025 am 09:33 AM

Bina aplikasi React dengan hujung belakang Laravel: Bahagian 2, React

12 skrip sembang php terbaik di codecanyon 12 skrip sembang php terbaik di codecanyon Mar 13, 2025 pm 12:08 PM

12 skrip sembang php terbaik di codecanyon

Pemberitahuan di Laravel Pemberitahuan di Laravel Mar 04, 2025 am 09:22 AM

Pemberitahuan di Laravel

See all articles