一起來學習C#的觀察者模式_第1頁
一起來學習C#的觀察者模式_第2頁
一起來學習C#的觀察者模式_第3頁
一起來學習C#的觀察者模式_第4頁
一起來學習C#的觀察者模式_第5頁
已閱讀5頁,還剩3頁未讀 繼續免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

第一起來學習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. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論