java 在观察者模式中使用泛型T的实例
被观察者
publicclassObservable<T>{ List<Observer>observers=newArrayList<Observer>(); booleanchanged=false; /** *Addsthespecifiedobservertothelistofobservers.Ifitisalready *registered,itisnotaddedasecondtime. * *@paramobserver *theObservertoadd. */ publicvoidaddObserver(Observerobserver){ if(observer==null){ thrownewNullPointerException("observer==null"); } synchronized(this){ if(!observers.contains(observer)) observers.add(observer); } } /** *Clearsthechangedflagforthis{@codeObservable}.Aftercalling *{@codeclearChanged()},{@codehasChanged()}willreturn{@codefalse}. */ protectedvoidclearChanged(){ changed=false; } /** *Returnsthenumberofobserversregisteredtothis{@codeObservable}. * *@returnthenumberofobservers. */ publicintcountObservers(){ returnobservers.size(); } /** *Removesthespecifiedobserverfromthelistofobservers.Passingnull *won'tdoanything. * *@paramobserver *theobservertoremove. */ publicsynchronizedvoiddeleteObserver(java.util.Observerobserver){ observers.remove(observer); } /** *Removesallobserversfromthelistofobservers. */ publicsynchronizedvoiddeleteObservers(){ observers.clear(); } /** *Returnsthechangedflagforthis{@codeObservable}. * *@return{@codetrue}whenthechangedflagforthis{@codeObservable}is *set,{@codefalse}otherwise. */ publicbooleanhasChanged(){ returnchanged; } /** *If{@codehasChanged()}returns{@codetrue},callsthe{@codeupdate()} *methodforeveryobserverinthelistofobserversusingnullasthe *argument.Afterwards,calls{@codeclearChanged()}. *<p> *Equivalenttocalling{@codenotifyObservers(null)}. */ publicvoidnotifyObservers(){ notifyObservers(null); } /** *If{@codehasChanged()}returns{@codetrue},callsthe{@codeupdate()} *methodforeveryObserverinthelistofobserversusingthespecified *argument.Afterwardscalls{@codeclearChanged()}. * *@paramdata *theargumentpassedto{@codeupdate()}. */ publicvoidnotifyObservers(Tdata){ intsize=0; Observer[]arrays=null; synchronized(this){ if(hasChanged()){ clearChanged(); size=observers.size(); arrays=newObserver[size]; observers.toArray(arrays); } } if(arrays!=null){ for(Observerobserver:arrays){ observer.update(this,data); } } } /** *Setsthechangedflagforthis{@codeObservable}.Aftercalling *{@codesetChanged()},{@codehasChanged()}willreturn{@codetrue}. */ protectedvoidsetChanged(){ changed=true; } }
观察者
publicinterfaceObserver<T>{ publicvoidupdate(Observable<T>observable,Tdata); }
以上这篇java在观察者模式中使用泛型T的实例就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持毛票票。