C 對觀察者(Observer)模式的支援(二)

2021-05-09 17:50:51 字數 1635 閱讀 1119

.net

為我們應用事件定義了標準的模式,我們在應用過程中應遵守定義事件的規則。乙個標準的事件模式包括四個方面的內容:

1、乙個繼承自

system.eventargs

型別的事件資訊類,並且這個類的名稱以

eventargs

結尾,如

sendmaileventargs

,這個類負責儲存事件源傳送給事件監聽者的資訊。如果事件源不需要給事件監聽者傳遞額外的資訊,可以直接使用

eventargs.empty

,這時我們就不用再去定義自己的事件資訊類了。

2、定義事件時使用的委託

(類似於觀察者模式中的抽象主題

subject

和抽象觀察者

observer

),這個委託返回型別為

void

,有兩個引數,第乙個引數型別為

object

,第二個為

system.eventargs

或它的子類,名字應以

eventhandler

結尾,如:

publicdelegate void ***eventhandler(object sender,sendmaileventargs e);.net

框架為我們定義了乙個符合事件規範的泛型委託

system.eventhandler(object sender , teventargs e) where teventargs:eventargs;

這樣我們在實際應用中就不用再去實現乙個自定義委託了,直接用這個泛型委託就可滿足我們應用事件的需要。

3、乙個負責通知事件訂閱者的事件源類(類似於觀察者模式中的具體主題

concretesubject

),這個類包含乙個事件成員,負責向外提供事件的訂閱和登出介面,並儲存他們的狀態;乙個負責引發事件的方法以通知所有這個事件的訂閱者,這個方法需要是乙個受保護的虛方法,並且是以

on開頭以事件名字結尾,並且接受乙個型別為

system.eventargs

(或子類)的引數。如定義乙個事件成員:

publicevent eventhandlersendmail;

那麼這個方法應為:

protected virtual void onsendmail(sendmaileventargs e){}

;還有乙個負責將外部呼叫或輸入轉化為期望事件的方法,估且叫做觸發器吧。

這個方法負責例項化乙個事件訊息類,呼叫引發事件的方法

on***

,並將事件訊息例項傳遞過去。

4、事件監聽者類

(類似於觀察者模式中的具體觀察者

concreteobserver)

,用來監聽事件源發出的訊息,這個類用來定義和事件相相容的方法,格式為返回值為

void

,有兩個引數,第乙個引數型別為

object

,第二個為相應的事件訊息類。例

:protected void phone_sendmail(object sender,eventargs e)

……;下面改寫上篇文章中的郵件傳送系統:

首先定義乙個事件訊息類,這個類負責儲存向裝置傳送的訊息。

事件源類.

事件監聽類

下面是客戶端的呼叫

C 觀察者模式(Observer)

當有很多個物件依賴於乙個狀態值時,為了在狀態值改變時統一的通知這些物件作出相應的改變,類似廣播通知 include include include include 觀察者抽象類 class cobserver virtual cobserver 狀態更新時的處理方法 virtual void upd...

Observer觀察者模式(C )

subject observers observer pattern 觀察者模式定義 物件之間的一對多依賴關係,當乙個物件改變狀態時,所有依賴於它的物件都會自動獲得通知 觀察者模式應用 主題物件只與觀察者基類有耦合 客戶配置觀察者的數量與型別 observers首先要知道subject,然後把自己註...

C 觀察者模式(Observer)

理解 訂閱 發布。把所有需要通知的物件新增到發布者類裡面。發布者更改自己狀態後通知觀察者 using system.collections.generic using system.windows.forms namespace designmode.observer public class we...