一区二区三区在线-一区二区三区亚洲视频-一区二区三区亚洲-一区二区三区午夜-一区二区三区四区在线视频-一区二区三区四区在线免费观看

服務器之家:專注于服務器技術及軟件下載分享
分類導航

PHP教程|ASP.NET教程|Java教程|ASP教程|編程技術|正則表達式|C/C++|IOS|C#|Swift|Android|VB|R語言|JavaScript|易語言|vb.net|

服務器之家 - 編程語言 - PHP教程 - php設計模式 Observer(觀察者模式)

php設計模式 Observer(觀察者模式)

2019-12-02 13:45PHP教程網 PHP教程

定義對象間的一種一對多的依賴關系,以便當一個對象的狀態發生改變時,所有依賴于它的對象都得到通知并自動刷新 能夠便利地創建查看目標對象狀態的對象,并且提供與核心對象非耦合的指定功能

代碼如下:


<?php 
/** 
* 觀察者模式 

* 定義對象間的一種一對多的依賴關系,以便當一個對象的狀態發生改變時,所有依賴于它的對象都得到通知并自動刷新 
* 能夠便利地創建查看目標對象狀態的對象,并且提供與核心對象非耦合的指定功能 
* 插件系統 
*/ 
class Observerable 

private $_observers = array(); 

public function registerObserver($observer) 

$this->_observers[] = $observer; 


public function removeObserver($observer) 

$key = array_search($observer,$this->_observers); 
if(!($key === false)) 

unset($this->_observers[$key]); 



public function notifyObservers() 

foreach($this->_observers as $observer) 

if($observer instanceof Observer) $observer->update($this); 




interface Observer 

public function update($observer); 


interface DisplayElement 

public function display(); 


// -- 實例類定義 
class NewsObserverable extends Observerable 

private $_sports_news; 
public function setSportsNews($data) 

$this->_sports_news = $data; 
$this->notifyObservers(); 


public function getSportsNews() 

return $this->_sports_news; 


private $_local_news; 
public function setLocalNews($data) 

$this->_local_news = $data; 
$this->notifyObservers(); 


public function getLocalNews() 

return $this->_local_news; 



class SportsNews implements Observer,DisplayElement 

private $_data = null; 
public function update($observer) 

if($this->_data != $observer->getSportsNews()) 

$this->_data = $observer->getSportsNews(); 
$this->display(); 



public function display() 

echo $this->_data.date("Y-m-d H:i:s")."<br/>"; 



class LocalNews implements Observer,DisplayElement 

private $_data = null; 
public function update($observer) 

if($this->_data != $observer->getLocalNews()) 

$this->_data = $observer->getLocalNews(); 
$this->display(); 



public function display() 

echo $this->_data.date("Y-m-d H:i:s")."<br/>"; 



// -- 實例化 --- 

$objObserver = new NewsObserverable(); 
$local = new LocalNews(); 
$sports = new SportsNews(); 

$objObserver->registerObserver($local); 
$objObserver->registerObserver($sports); 

$objObserver->setSportsNews("sports news 1 "); 
$objObserver->setLocalNews("local news 1 "); 
$objObserver->removeObserver($sports); 
$objObserver->setLocalNews("local news 2 "); 
$objObserver->setSportsNews("sports news 2 "); 
$objObserver->removeObserver($local); 
$objObserver->setLocalNews("local news 3 "); 

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: 日本一级不卡一二三区免费 | chinese一bdsmⅹxx| 99爱在线精品视频免费观看9 | 成人伊在线影院 | 国产精品亚洲精品日韩已方 | 91精品国产在线 | 久久综合网久久综合 | 美女视频黄a | 国产精品欧美韩国日本久久 | 办公室操秘书 | 97色吧| 男人使劲躁女人视频免费 | sedog在线长片 | 日韩欧美中文字幕一区 | 任我鲁精品视频精品 | 91制片厂果冻星空传媒3xg | 日本视频一区在线观看免费 | 亚洲 日韩 国产 制服 在线 | 国产精品亚洲午夜不卡 | 国产一区二区免费福利片 | 亚洲精品国产在线观看 | 91热国内精品永久免费观看 | 能看的毛片网站 | 日韩精品一区二区 | 高h短篇合集 | 国产欧美va欧美va香蕉在线观 | 小鸟酱在线播放 | 色香视频在线 | hezyo加勒比一区二区三区 | 免费观看俄罗斯特黄特色 | 免费观看日本 | 精品亚洲国产一区二区 | 欧美精品色精品一区二区三区 | 亚洲六月丁香婷婷综合 | 顶级欧美做受xxx000大乳 | 狠狠香蕉| 日韩一级片在线免费观看 | 手机看片福利盒子久久 | 吉川爱美与黑人解禁 | nxgx国产 | 亚洲高清国产品国语在线观看 |