Observer模式(监听方,被监听方)

其实,道理很简单的。

 

【监听方】

我要监听某个东东,那么我肯定得有一个监听器/或叫观察者myObserver

我的监听器里,有个method,来处理监听过来的数据update()

那么:

(1)这个Listener和method有什么要求呢?就是必须实现被监听方给你的接口interface。Observer

(2)这个listener如何注册给被监听方呢?方法很多,例如被监听方给出一个单例类C,让调用方调用C.getInstance().setListener(ourListener); 注进去

 

【被监听方】

被监听方,往往维护着一个List<listener>,在某个东东变更之后,告知所有监听器(for()循环调用listener.method()),于是就实现了监听。

 

【随便一说】

被监听方,可以用自己的线程去告知所有监听器,也可以调用监听器自身的线程池进行处理。

我个人比较倾向于后者,因为如果处理程序比较复杂,使用监听器自身线程池可以异步化,将被监听方线程解脱出来。

 

监听方,可以是new出来的,也可以是bean装配进来的,这个没关系。

 

 

【程序模样】

 

[1]Subject向外提供的接口Observer

class Observer{
 notify();
}

[2]调用方myObserver

class MyListener{
     Observer listener = new myObserver(); //可new,可装配
     public void doBizOperation(){
     }
     class myObserver implements Observer{
          notify(){ 
          }
     }
}

[3]被调用方Subject

class Subject{
     List<InterfaceByCalled> listeners = new List<InterfaceByCalled>();
     public void setListener(InterfaceByCalled listener){
          listeners.add(listener);
     }
     public List<Observer> informListeners(){
          for(Observer listener:this.listeners){
               listener.notify(); 
          }
}
}

[4]最后,将MyListener注入到Subject中即可。

Observer observer = myListener.getListener();

subject.setListener(observer);

 

 

 
posted @ 2012-02-06 12:54  技术草根女  Views(735)  Comments(0Edit  收藏  举报