




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
第一起來學(xué)習(xí)C#的觀察者模式BaggageHandlerprovider=newBaggageHandler();
ArrivalsMonitorobserver1=newArrivalsMonitor("BaggageClaimMonitor1");
ArrivalsMonitorobserver2=newArrivalsMonitor("SecurityExit");
//添加信息,此時(shí)沒有觀察者,對(duì)于新的信息不會(huì)進(jìn)行操作,若有觀察者,則對(duì)觀察者內(nèi)部數(shù)據(jù)進(jìn)行對(duì)比,若有新內(nèi)容則進(jìn)行更新。
provider.BaggageStatus(712,"Detroit",3);
//添加了觀察者,觀察者內(nèi)部也有數(shù)據(jù)集。新信息傳進(jìn)來,會(huì)與內(nèi)部數(shù)據(jù)集進(jìn)行對(duì)比,若有新內(nèi)容則進(jìn)行更新。
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);
//參數(shù)3為0執(zhí)行移除712對(duì)應(yīng)信息值,對(duì)應(yīng)觀察者打印
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)
//參數(shù)是處理者!添加觀察者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等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年工業(yè)大數(shù)據(jù)行業(yè)當(dāng)前發(fā)展現(xiàn)狀及增長(zhǎng)策略研究報(bào)告
- 2025年保健器材行業(yè)當(dāng)前發(fā)展現(xiàn)狀及增長(zhǎng)策略研究報(bào)告
- 中醫(yī)藥國(guó)際化進(jìn)程中的2025年市場(chǎng)拓展與中醫(yī)藥產(chǎn)業(yè)國(guó)際化人才培養(yǎng)研究報(bào)告
- 2025年制冰機(jī)行業(yè)當(dāng)前發(fā)展現(xiàn)狀及增長(zhǎng)策略研究報(bào)告
- 2025年垃圾處理行業(yè)當(dāng)前發(fā)展現(xiàn)狀及增長(zhǎng)策略研究報(bào)告
- 2025年磷化工行業(yè)當(dāng)前競(jìng)爭(zhēng)格局與未來發(fā)展趨勢(shì)分析報(bào)告
- 2025年塑料制品行業(yè)當(dāng)前競(jìng)爭(zhēng)格局與未來發(fā)展趨勢(shì)分析報(bào)告
- 2025年減震器制造行業(yè)當(dāng)前競(jìng)爭(zhēng)格局與未來發(fā)展趨勢(shì)分析報(bào)告
- 嬰幼兒尿布性皮炎護(hù)理指南
- 《職業(yè)發(fā)展與就業(yè)指導(dǎo)》課件第3章
- 13J104蒸壓加氣混凝土砌塊板材構(gòu)造
- 基本藥物臨床應(yīng)用管理制度
- 腫瘤惡液質(zhì)營(yíng)養(yǎng)治療指南
- 美術(shù)實(shí)訓(xùn)室功能設(shè)計(jì)方案
- 護(hù)理優(yōu)勢(shì)??茀R報(bào)
- 銀行職工反詐工作總結(jié)
- 盆底功能障礙問卷(PFDI20)
- 設(shè)備安裝管理培訓(xùn)課件
- 老年人轉(zhuǎn)運(yùn)照護(hù)-輪椅運(yùn)轉(zhuǎn)
- 國(guó)家電網(wǎng)公司供電企業(yè)勞動(dòng)定員標(biāo)準(zhǔn)
- 7-聊城東制梁場(chǎng)80t龍門吊安拆安全專項(xiàng)方案-八局一-新建鄭州至濟(jì)南鐵路(山東段)工程ZJTLSG-2標(biāo)段
評(píng)論
0/150
提交評(píng)論