委托、事件與observer設(shè)計模式

委托、事件與observer設(shè)計模式

ID:35344938

大?。?4.16 KB

頁數(shù):10頁

時間:2019-03-23

委托、事件與observer設(shè)計模式_第1頁
委托、事件與observer設(shè)計模式_第2頁
委托、事件與observer設(shè)計模式_第3頁
委托、事件與observer設(shè)計模式_第4頁
委托、事件與observer設(shè)計模式_第5頁
資源描述:

《委托、事件與observer設(shè)計模式》由會員上傳分享,免費在線閱讀,更多相關(guān)內(nèi)容在工程資料-天天文庫。

1、委托、事件與Observer設(shè)計模式范例說明上面的例了已不足以再進行下面的講解了,我們來看一個新的范例,因為之前已經(jīng)介紹了很多的內(nèi)容,所以本節(jié)的進度會稍微快一些:假設(shè)我們有個高檔的熱水器,我們給它通上電,當水溫超過95度的時候:1、揚聲器會開始發(fā)岀語音,告訴你水的溫度;2、液晶屏也會改變水溫的顯示,來提示水已經(jīng)快燒開了?,F(xiàn)在我們需耍寫個程序來模擬這個燒水的過程,我們將定義一個類來代表熱水器,我們管它叫:Heater,它冇代表水溫的字段,叫做temperature;當然,還有必不可少的給水加熱方法Boi1Water(),一個發(fā)出語音警報

2、的方法MakeAlert(),一個顯示水溫的方法,ShowMsg0。namespaceDelegate{classHetiter{privateinttemperature;//水溫//燒水publicvoidBoilWater0{for(inti=0;i<=100;i卄){temperature=i:if(temperature>95){MakeAlert(temperature);ShowMsg(temperature);)))//發(fā)出語音警報privatevoidMakeAlert.(int.parcim){Console.Wr

3、iteLine(^Alarm:嘀嘀嘀,水已經(jīng){0}度了:",param);)//顯示水溫privatevoidShowMsg(int.partim){Console.WriteLine(''Display:水快開了,當前溫度:{0}度。",param);))classProgram{staticvoidMain(){Heaterht=newHeater():ht.BoilWater0;))}Observer設(shè)計模式簡介上面的例子顯然能完成我們之前描述的工作,但是卻并不夠好?,F(xiàn)在假設(shè)熱水器由三部分組成:熱水器、警報器、顯示器,它們來口于

4、不同廠商并進行了組裝。那么,應該是熱水器僅僅負責燒水,它不能發(fā)出警報也不能顯示水溫;在水燒開吋由警報器發(fā)出警報、顯示器顯示提示和水溫。這時候,上面的例子就應該變成這個樣子://熱水器publicclcissHetiler{privateinttemperature;//燒水privatevoidBoilWater(){for(inti=0;i<=100;i++){temperature=i:))}//警報器publicclassAlarm{privatevoidMakeAlert(intparam){Console.WriteLine

5、("Alarm:嘀嘀嘀,水已經(jīng){0)度了:",param):)}//顯示器publicclassDisplay{privatevoidShowMsg(int.partim){Console.WriteLinc(''Display:水已燒開,當前溫度:{0}度。",param);)這里就出現(xiàn)了一個問題:如何在水燒開的時候通知報警器和顯示器?在繼續(xù)進行之前,我們先了解一下Observer設(shè)計模式,Observer設(shè)計模式中主要包括如下兩類對象:1.Subject:監(jiān)視對象,它往往包含著其他對象所感興趣的內(nèi)容。在木范例中,熱水器就是一個監(jiān)視

6、對象,它包含的其他對象所感興趣的內(nèi)容,就是temprature字段,當這個字段的值快到100時,會不斷把數(shù)據(jù)發(fā)給監(jiān)視它的對象。2.Observer:監(jiān)視者,它監(jiān)視Subject,當Subject中的某件爭發(fā)生的時候,會告知Observer,而Observer則會采取相應的行動。在本范例中,Observer有警報器和顯示器,它們采取的行動分別是發(fā)出警報和顯示水溫。在木例中,事情發(fā)生的順序應該是這樣的:1.警報器和顯示器告訴熱水器,它對它的溫度比較感興趣(注冊)。2.熱水器知道后保留對警報器和顯示器的引用。3.熱水器進行燒水這一動作,當水

7、溫超過95度時,通過對警報器和顯示器的引用,口動調(diào)用警報器的MakeAlert()方法、顯示器的ShowMsg0方法。類似這樣的例子是很多的,G01;對它進行了抽象,稱為Observer設(shè)計模式:Observer設(shè)計模式是為了定義對象間的一種一對多的依賴關(guān)系,以便于當一個對象的狀態(tài)改變時,其他依賴于它的對象會被自動告知并更新。Observer模式是一種松耦合的設(shè)計模式。實現(xiàn)范例的Observer設(shè)計模式我們Z前己經(jīng)對委托和事件介紹很多了,現(xiàn)在寫代碼應該很容易了,現(xiàn)在在這里直接給出代碼,并在注釋屮加以說明。usingSystem;usi

8、ngSystem?Collections?Generic;usingSystem?Text;namespaceDelegate{//熱水器publicclassHeater{privateinttemperature;p

當前文檔最多預覽五頁,下載文檔查看全文

此文檔下載收益歸作者所有

當前文檔最多預覽五頁,下載文檔查看全文
溫馨提示:
1. 部分包含數(shù)學公式或PPT動畫的文件,查看預覽時可能會顯示錯亂或異常,文件下載后無此問題,請放心下載。
2. 本文檔由用戶上傳,版權(quán)歸屬用戶,天天文庫負責整理代發(fā)布。如果您對本文檔版權(quán)有爭議請及時聯(lián)系客服。
3. 下載前請仔細閱讀文檔內(nèi)容,確認文檔內(nèi)容符合您的需求后進行下載,若出現(xiàn)內(nèi)容與標題不符可向本站投訴處理。
4. 下載文檔時可能由于網(wǎng)絡(luò)波動等原因無法下載或下載錯誤,付費完成后未能成功下載的用戶請聯(lián)系客服處理。