C 中觀察者模式的實現 事件

2021-09-10 12:32:40 字數 2042 閱讀 2549

參考

c#中的事件是一種典型的觀察者模式

winform程式中,可訂閱按鈕等控制項引發的事件。

事件具有以下屬性(來自microsoftdoc):

以下是參照張陽--三種觀察者模式的c#實現的示例

鬧鐘相關方法

private

void

turnonthealarm

(datetime? alarmtime)

var canceltoken =

newcancellationtokensource()

;var task =

newtask((

)=>

else")

;}canceltoken.token.waithandle.

waitone

(timespan.

fromseconds(1

));}

}, canceltoken.token, taskcreationoptions.longrunning)

; task.

start()

;}private

void

alarm()

鬧鐘類及相關事件

/// 

/// 鬧鐘類

///

public

class

alarmclock

protected

virtual

void

onalarmcustomevent

(customeventargs e)

";handler

(this

, e);}

}}public

delegate

void

eventhandler

(object sender,

eventargs e)

;public

class

customeventargs

:eventargs

private

string message;

public

string message

set}

}

訂閱鬧鐘的裝置

/// 

/// 床頭燈

///

public

class

bedsidelamp

void

handlecustomevent

(object sender,

customeventargs e)

】 收到訊息: ");

_logger.

logimportantinfo

($"【】 已開啟床頭燈");

}}///

/// 窗簾

///

public

class

curtains

void

handlecustomevent

(object sender,

customeventargs e)

】 收到訊息: ");

_logger.

logimportantinfo

($"【】 已開啟窗簾");

}}///

/// 音箱

///

public

class

speaker

void

handlecustomevent

(object sender,

customeventargs e)

】 收到訊息: ");

_logger.

logimportantinfo);

}}

事件(c# 程式設計指南)

本文github原始碼

三種觀察者模式的c#實現

Spring中觀察者模式的應用

service public class myservice 自定義事件 public class myevent extends 自定義 觀察者 component public class mylistener configuration componentscan enableasync pu...

設計模式之Spring中觀察者模式

定義物件之間存在一對多或者一對一依賴,當乙個物件改變狀態,依賴它的物件會收到通知並自動更新。mq其實就屬於一種觀察者模式,發布者發布資訊,訂閱者獲取資訊,訂閱了就能收到資訊,沒訂閱就收不到資訊。優點1.觀察者和被觀察者是抽象耦合的。2.建立一套觸發機制。缺點1 如果乙個被觀察者物件有很多的直接和間接...

C 實現觀察者模式

定義物件間的一種一對多的依賴關係,當乙個物件的狀態發生改變時,所有依賴於它的物件都得到通知並被自動更新。完美的將觀察者和被觀察的物件分離開。有時又被稱為 模型 檢視 view 模式 源 收聽者 listener 模式 或為發布 訂閱模式 目標就是通知的發布者,觀察者是通知的訂閱者 接受通知 obse...