zoukankan      html  css  js  c++  java
  • 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);

     

     

     
  • 相关阅读:
    CopyOnWriteArrayList
    Herriot
    Prefix tree
    hadoop 测试框架
    Hadoop RPC
    OpenCV2马拉松第2圈——读写图片
    LCD深度剖析
    SharePoint 改动passwordWeb Part部署方案
    android小游戏模版—重力感应
    CSS(层叠样式表)基础知识
  • 原文地址:https://www.cnblogs.com/alipayhutu/p/2339906.html
Copyright © 2011-2022 走看看