事件驅(qū)動(dòng)架構(gòu)Event Driven Architecture (EDA) 是一種低耦合可分布式的架構(gòu),它通常處理異步信息流。
創(chuàng)新互聯(lián)是專業(yè)的鷹手營子網(wǎng)站建設(shè)公司,鷹手營子接單;提供成都做網(wǎng)站、成都網(wǎng)站制作,網(wǎng)頁設(shè)計(jì),網(wǎng)站設(shè)計(jì),建網(wǎng)站,PHP網(wǎng)站建設(shè)等專業(yè)做網(wǎng)站服務(wù);采用PHP框架,可快速的進(jìn)行鷹手營子網(wǎng)站開發(fā)網(wǎng)頁制作和功能擴(kuò)展;專業(yè)做搜索引擎喜愛的網(wǎng)站,專業(yè)的做網(wǎng)站團(tuán)隊(duì),希望更多企業(yè)前來合作!通??梢园咽录醋魇菢I(yè)務(wù)領(lǐng)域中發(fā)生的一個(gè)變化。因此,在代碼中我們需要定義事件,并且實(shí)例化該事件。在.net中,事件可以看作行為的結(jié)果。必然有事件發(fā)生者和接收者,觸發(fā)事件的對(duì)象為發(fā)生者,響應(yīng)事件的對(duì)象則為事件接收者。委托(delegate)則串聯(lián)起發(fā)生者和接收者。C#中委托的概念不在此累述。下面代碼是聲明委托,初始化委托和調(diào)用委托的示例。
聲明一個(gè)委托
- publicdelegateintobjectobject
實(shí)例化一個(gè)委托
- TestDelegate TD = new
調(diào)用一個(gè)委托
- TestDelegateMethod(" This is a Test."
注意,其實(shí)在C#中,更多的時(shí)候是使用event修飾的delegate。使用event修飾后的委托是一個(gè)特殊的委托,它的特殊性體現(xiàn)在對(duì)象的封裝性上。比如上面的代碼可以寫成
event TestDelegate TD = TestDelegateMethod;關(guān)于event和delegate的更多細(xì)節(jié)可以參考博文
http://www.tracefact.net/CSharp-Programming/Delegates-and-Events-in-CSharp.aspx
http://blog.monstuff.com/archives/000040.html
假設(shè)有如下一個(gè)應(yīng)該場(chǎng)景,一個(gè)血壓監(jiān)測(cè)儀器,在病人每一次心跳的時(shí)候,監(jiān)測(cè)血壓,一旦發(fā)現(xiàn)病人血壓小于80,則開始報(bào)警。
那么此處,動(dòng)作的發(fā)出者就是病人,一旦發(fā)出心跳這個(gè)動(dòng)作后,(通知)血壓檢測(cè)儀立即檢測(cè)血壓,如果小于80,則發(fā)出警報(bào)。
有一個(gè)BloodPressureMonitor類和Paient類。BloodPressureMonitor類只用一個(gè)方法,監(jiān)測(cè)血壓。病人類中主要有一個(gè)委托和一個(gè)HeartBeat()方法。其中每次調(diào)用HeartBeat()方法,都會(huì)調(diào)用委托方法。(此處,委托的意義類似于函數(shù)式編程的概念,將函數(shù)作為一個(gè)變量值,該變量賦予了哪個(gè)函數(shù)就調(diào)用哪個(gè)函數(shù))。
因此,在main方法中,主要就是對(duì)dosth委托的賦值,也就是對(duì)病人每次心跳的時(shí)候,要調(diào)用一下血壓檢測(cè)儀的CheckPresssure方法。
代碼如下:
- publicdelegatevoidint
- class
- publicvoidint
- if
- "Alert!Bloodpressure is less than {0}"
- else
- "Bloodpressure is {0}"
- class
- publicevent
- publicgetset
- publicintgetset
- publicvoid
- ifnull
- class
- staticvoidstring
- new
- "Tom"
- new
- forint
運(yùn)行結(jié)果如下:
也許很多人會(huì)覺得,那何必這么麻煩,直接在 HeartBeat方法中調(diào)用BloodPressureMonitor的CheckPresssure方法不就行了嘛,何必用委托呢?例如直接寫成
- publicvoid
- new
這樣的寫法不也是可以實(shí)現(xiàn)的嗎?
是的,但是這種寫法不靈活,首先,使用委托的話,可以利用委托的一些特點(diǎn),比如調(diào)用委托的BeginInvoke方法可以異步在線程池線程上執(zhí)行。
其次,如果此時(shí)再要加一個(gè)電話呼叫功能,一旦血壓小于60,電話機(jī)自動(dòng)呼叫醫(yī)生,那么在現(xiàn)有的基礎(chǔ)上,改起來十分容易。只需要加個(gè)電話類,然后在委托上再掛一個(gè)方法就行了。
代碼如下:
附件:http://down.51cto.com/data/2362600
- using
- using
- using
- using
- namespace
- publicdelegatevoidint//定義一個(gè)委托
- class
- publicvoidint
- if
- "Alert!Bloodpressure is less than {0}"
- else
- "Bloodpressure is {0}"
- class
- publicvoidint
- if
- "Call doctor!"
- class
- publicevent
- publicgetset
- publicintgetset
- publicvoid//心跳時(shí),調(diào)用dosth委托
- ifnull
- class
- staticvoidstring
- new
- "Tom"
- new
- //具體設(shè)定dosth是哪些方法。用+=可以掛載多個(gè)方法
- new
- forint
另外有需要云服務(wù)器可以了解下創(chuàng)新互聯(lián)scvps.cn,海內(nèi)外云服務(wù)器15元起步,三天無理由+7*72小時(shí)售后在線,公司持有idc許可證,提供“云服務(wù)器、裸金屬服務(wù)器、高防服務(wù)器、香港服務(wù)器、美國服務(wù)器、虛擬主機(jī)、免備案服務(wù)器”等云主機(jī)租用服務(wù)以及企業(yè)上云的綜合解決方案,具有“安全穩(wěn)定、簡單易用、服務(wù)可用性高、性價(jià)比高”等特點(diǎn)與優(yōu)勢(shì),專為企業(yè)上云打造定制,能夠滿足用戶豐富、多元化的應(yīng)用場(chǎng)景需求。
當(dāng)前題目:事件驅(qū)動(dòng)架構(gòu)(EDA)和觀察者模式-創(chuàng)新互聯(lián)
網(wǎng)站URL:http://muchs.cn/article16/dooidg.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供虛擬主機(jī)、靜態(tài)網(wǎng)站、品牌網(wǎng)站建設(shè)、定制開發(fā)、商城網(wǎng)站、搜索引擎優(yōu)化
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)
猜你還喜歡下面的內(nèi)容