




版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
第一起來學習C#的觀察者模式BaggageHandlerprovider=newBaggageHandler();
ArrivalsMonitorobserver1=newArrivalsMonitor("BaggageClaimMonitor1");
ArrivalsMonitorobserver2=newArrivalsMonitor("SecurityExit");
//添加信息,此時沒有觀察者,對于新的信息不會進行操作,若有觀察者,則對觀察者內部數據進行對比,若有新內容則進行更新。
provider.BaggageStatus(712,"Detroit",3);
//添加了觀察者,觀察者內部也有數據集。新信息傳進來,會與內部數據集進行對比,若有新內容則進行更新。
observer1.Subscribe(provider);
provider.BaggageStatus(712,"Kalamazoo",3);
provider.BaggageStatus(400,"NewYork-Kennedy",1);
provider.BaggageStatus(712,"Detroit",3);
observer2.Subscribe(provider);
provider.BaggageStatus(511,"SanFrancisco",2);
//參數3為0執行移除712對應信息值,對應觀察者打印
provider.BaggageStatus(712);
observer2.Unsubscribe();
provider.BaggageStatus(400);
provider.LastBaggageClaimed();
//Theexampledisplaysthefollowingoutput:
//ArrivalsinformationfromBaggageClaimMonitor1
//Detroit7123
//ArrivalsinformationfromBaggageClaimMonitor1
//Detroit7123
//Kalamazoo7123
//ArrivalsinformationfromBaggageClaimMonitor1
//Detroit7123
//Kalamazoo7123
//NewYork-Kennedy4001
//ArrivalsinformationfromSecurityExit
//Detroit7123
//ArrivalsinformationfromSecurityExit
//Detroit7123
//Kalamazoo7123
//ArrivalsinformationfromSecurityExit
//Detroit7123
//Kalamazoo7123
//NewYork-Kennedy4001
//ArrivalsinformationfromBaggageClaimMonitor1
//Detroit7123
//Kalamazoo7123
//NewYork-Kennedy4001
//SanFrancisco5112
//ArrivalsinformationfromSecurityExit
//Detroit7123
//Kalamazoo7123
//NewYork-Kennedy4001
//SanFrancisco5112
//ArrivalsinformationfromBaggageClaimMonitor1
//NewYork-Kennedy4001
//SanFrancisco5112
//ArrivalsinformationfromSecurityExit
//NewYork-Kennedy4001
//SanFrancisco5112
//ArrivalsinformationfromBaggageClaimMonitor1
//SanFrancisco5112
usingSystem;
usingSystem.Collections.Generic;
publicclassArrivalsMonitor:IObserverBaggageInfo
privatestringname;
privateListstringflightInfos=newListstring
privateIDisposablecancellation;
privatestringfmt="{0,-20}{1,5}{2,3}";
publicArrivalsMonitor(stringname)
if(String.IsNullOrEmpty(name))
thrownewArgumentNullException("Theobservermustbeassignedaname.");
=name;
publicvirtualvoidSubscribe(BaggageHandlerprovider)
//參數是處理者!添加觀察者this
cancellation=provider.Subscribe(this);
publicvirtualvoidUnsubscribe()
cancellation.Dispose();
flightInfos.Clear();
publicvirtualvoidOnCompleted()
flightInfos.Clear();
//Noimplementationneeded:MethodisnotcalledbytheBaggageHandlerclass.
publicvirtualvoidOnError(Exceptione)
//Noimplementation.
//Updateinformation.
publicvirtualvoidOnNext(BaggageInfoinfo)
boolupdated=false;
//Flighthasunloadeditsbaggage;removefromthemonitor.
if(info.Carousel==0)
varflightsToRemove=newListstring
stringflightNo=String.Format("{0,5}",info.FlightNumber);
foreach(varflightInfoinflightInfos)
if(flightInfo.Substring(21,5).Equals(flightNo))
flightsToRemove.Add(flightInfo);
updated=true;
foreach(varflightToRemoveinflightsToRemove)
flightInfos.Remove(flightToRemove);
flightsToRemove.Clear();
else
//Addflightifitdoesnotexistinthecollection.
stringflightInfo=String.Format(fmt,info.From,info.FlightNumber,info.Carousel);
if(!flightInfos.Contains(flightInfo))
flightInfos.Add(flightInfo);
updated=true;
if(updated)
flightInfos.Sort();
Console.WriteLine("Arrivalsinformationfrom{0}",);
foreach(varflightInfoinflightInfos)
Console.WriteLine(flightInfo);
Console.WriteLine();
usingSystem;
usingSystem.Collections.Generic;
publicclassBaggageHandler:IObservableBaggageInfo
privateListIObserverBaggageInfoobservers;
privateListBaggageInfoflights;
publicBaggageHandler()
observers=newListIObserverBaggageInfo();
flights=newListBaggageInfo
publicIDisposableSubscribe(IObserverBaggageInfoobserver)
//Checkwhetherobserverisalreadyregistered.Ifnot,addit
if(!observers.Contains(observer))
observers.Add(observer);
//Provideobserverwithexistingdata.
foreach(variteminflights)
observer.OnNext(item);
returnnewUnsubscriberBaggageInfo(observers,observer);
//Calledtoindicateallbaggageisnowunloaded.
publicvoidBaggageStatus(intflightNo)
BaggageStatus(flightNo,String.Empty,0);
publicvoidBaggageStatus(intflightNo,stringfrom,intcarousel)
varinfo=newBaggageInfo(flightNo,from,carousel);
//Carouselisassigned,soaddnewinfoobjecttolist.
if(carousel0!flights.Contains(info))
flights.Add(info);
foreach(varobserverinobservers)
observer.OnNext(info);
elseif(carousel==0)
//Baggageclaimforflightisdone
varflightsToRemove=newListBaggageInfo
foreach(varflightinflights)
if(info.FlightNumber==flight.FlightNumber)
flightsToRemove.Add(flight);
foreach(varobserverinobservers)
observer.OnNext(info);
foreach(varflightToRemoveinflightsToRemove)
flights.Remove(flightToRemove);
flightsToRemove.Clear();
publicvoidLastBaggageClaimed()
foreach(varobserverinobservers)
observer.OnCompleted();
observers.Clear();
usingSystem;
usingSystem.Collections.Generic;
publicclassBaggageInfo
privateintflightNo;
privatestringorigin;
privateintlocation;
internalBaggageInfo(intflight,stringfrom,intcarousel)
this.flightNo=flight;
this.origin=from;
this.location=carousel;
publicintFlightNumber
get{returnthis.flightNo;}
publicstringFrom
get{returnthis.origin;}
publicintCarousel
get{returnthis.location;}
usingSystem;
usingSystem.Colle
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 【課件】+三角形的內角和+課件2025-2026學年++人教版八年級數學上冊+
- 教育技術工具的商業價值與應用前景
- 教育技術下的在線教育資源的持續發展與優化
- 智慧城市背景下共享電動車的充電設施建設
- 情感智能化在教育平臺中的個性化實踐
- 鷹潭職業技術學院《描述性統計學及實驗》2023-2024學年第一學期期末試卷
- 地下管線保護專項方案
- 教育心理學在提高工作效率中的作用
- 山東省濟寧院附中2024-2025學年數學七年級第一學期期末統考試題含解析
- 應急管理培訓內容
- 南通市如東縣醫療衛生單位招聘事業編制工作人員筆試真題2024
- 歷史●甘肅卷丨2024年甘肅省普通高中學業水平等級性考試高考歷史真題試卷及答案
- 2024年杭州市臨安區事業單位統一招聘真題
- C語言程序設計基礎知到智慧樹期末考試答案題庫2025年石河子大學
- 黨建考試試題及答案國企
- 小學圖書館面試題及答案
- 客運行業事故隱患內部報告獎勵管理制度2025
- 快消品包裝2025年可再生資源利用現狀與前景報告
- 縱隔腫物護理
- 房屋建筑與市政工程重大事故安全隱患判定標準解讀課件
- DB43-T 1267-2023 機動車檢驗機構建設和運行管理規范
評論
0/150
提交評論