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的实例就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持毛票票。