? 无码av三级毛片完整版,校园激情一区二区
聯(lián)系我們

給我們留言

聯(lián)系我們

地址:福建省晉江市青陽街道洪山路國際工業(yè)設(shè)計園納金網(wǎng)

郵箱:info@narkii.com

電話:0595-82682267

(周一到周五, 周六周日休息)

當前位置:主頁 > 3D教程 > 圖文教程

如何實現(xiàn)觀察者模式

來源: 未知 | 責任編輯:六月芳菲 | 發(fā)布時間: 2018-03-02 09:24 | 瀏覽量:
更多精彩unity教程:http://m.594ljc.cn/resource/

觀察者設(shè)計模式遵循面向?qū)ο缶幊痰囊粋€最重要的原則。 這個原則是:
努力實現(xiàn)交互對象之間的低耦合設(shè)計。
這意味著你的類應該能夠相互交互,但彼此之間知道很少對方內(nèi)部細節(jié)。這本質(zhì)上意味著你的類應該具有低耦合性。
一個好的類比,有助于了解觀察者設(shè)計模式是如何工作的,如報紙訂閱。
報紙和訂閱者彼此都有內(nèi)部知識信息,但他們能夠互動。報紙用新聞更新訂閱用戶,訂閱用戶讀它們提供的新聞。
 
實現(xiàn)觀察者模式
 
我們將在C++中實現(xiàn)觀察者設(shè)計模式。我們將使用抽象類來實現(xiàn)接口的概念。
我們會創(chuàng)建兩個接口,其名稱為:Subject和Observer。Subject接口將包含注冊,刪除和通知Observer對象的虛函數(shù)。
Observer接口將有一個使用來自Subject對象的信息更新的虛函數(shù)。
然后我們將創(chuàng)建兩個具體的類,實現(xiàn)每個接口的虛函數(shù)。
將實現(xiàn)Subject接口的類將充當新聞站。它將注冊并通知其訂閱者最新消息。
實現(xiàn)Observer接口的類將充當訂閱者。它將預訂自己的Subject接口并接收任何通知。

更多精彩unity教程:http://m.594ljc.cn/resource/
 
Subject接口的實現(xiàn)
 
Subject接口的實現(xiàn)非常簡單?;叵胍幌?,在C ++中創(chuàng)建一個接口,你必須讓類成為一個抽象類,通過使用虛函數(shù)并將其初始化為0。
代碼1顯示了Subject接口的實現(xiàn)。
 
代碼1:Subject接口
 

#include "Observer.h"
class 
Subject{
public
:
virtual 
void 
registerObserver(Observer *obs)=0;
virtual 
void 
removeObserver(Observer *obs)=0;
virtual 
void 
notifyObserver()=0;
};
Subject類中的三個方法都必須是虛函數(shù)。 一個具體的類將繼承這個類,并要求具體子類必須實現(xiàn)三個虛擬方法。
 
Observer接口的實現(xiàn)
 
Observer接口的實現(xiàn)遵循與Subject接口相同的邏輯。但是,此接口只需要一個虛函數(shù)。
 
代碼2顯示了Observer接口的實現(xiàn)。
一個具體的類也將繼承這個類,并且必須實現(xiàn)虛函數(shù)update方法。
 
代碼2: Observer 接口
 

class 
Observer{
public

virtual 
void 
update()=0;
};
 
NewsStation類實現(xiàn)
 
代碼3和4顯示了NewsStation類的實現(xiàn)。
具體類中包含一個向量來存儲Observer對象。
 
代碼3. NewsStation.h文件
 

class 
NewsStation:
public 
Subject{
public

//vector to store all register observers
vector observers;
//constructor
NewsStation(){};
//method to register observer
void 
registerObserver(Observer *obs);
//method to remove observer
void 
removeObserver(Observer *obs);
//method to notify observer
void 
notifyObserver();
};
當NewsStation類需要通知其訂閱用戶時,它只要通過遍歷向量并發(fā)送更新。
 
代碼4:Newspaper方法實現(xiàn)
 

void 
NewsStation::registerObserver(Observer *obs){
observers.push_back(obs);
}
void 
NewsStation::removeObserver(Observer *obs){
observers.erase(find(observers.begin(), observers.end(), obs));
}
void 
NewsStation::notifyObserver(){
//search for all register observers
for 
(
int 
i=0; iupdate();
}
}
 
實現(xiàn)NewsReader類
 
代碼5和6中顯示了NewsReader類的實現(xiàn)。
注意,我們有一個指向Subject接口的指針,如代碼5所示。
在創(chuàng)建NewsReader類之后,我們將對象注冊到Subject接口,在本例中是注冊到NewsStation類中。
 
代碼5:NewsReader.h文件
 

#include "Subject.h"
class 
NewsReader:
public 
Observer{
public
:
Subject *subject;
//Note that we are registering the newsreader to the Subject class during initialization
NewsReader(Subject *sub){
subject=sub;
subject->registerObserver(
this
);
}
void 
update();
};
代碼6顯示了Update方法的實現(xiàn)。它只是輸出讀者已經(jīng)被通知的消息。
 
代碼6. NewsReader方法實現(xiàn)

[table][tr][td]
void 
NewsReader::update(){
//Output:"I am the news reader that was notified"
cout

更多精彩unity教程:http://m.594ljc.cn/resource/
 

相關(guān)文章
網(wǎng)友評論

您需要登錄后才可以發(fā)帖 登錄 | 立即注冊

關(guān)閉

全部評論:0條

推薦
熱門