小弟我现在手头上在做一个项目,其中有几个类的状态需要监控(主要是成员变量),发生变化的时候要触发一系列活动   用observer模式的话需要在这些类的对象的更新过程中通知observer来触发动作,就算再加上符合MVC框架的事件,也还是需要在代码里显式地生成事件才能触发动作   请问有没有办法设计一个类专门负责主动监听observable的状态,在observable的对象的状态发生变化时去调用对应的过程呢?   
如果有,又该怎么实现呢(最好不要用定时轮巡的方法)?   谢谢!

解决方案 »

  1.   

    这个是针对observer模式的一些功能特性,和网络配置没有关系的
      

  2.   

    可以在web.xml配置监听类,可以具体监听某一个类被访问后,可以触发一个事件
      

  3.   

    用 AOP (Spring, AspectJ之类的) 技术,动态监视类的方法。
      

  4.   

    楼主,baidu 心寄笔端 事件模型 这两个关键字.所谓Observer的侦听是从理解的角度说的,通常用实现接口的方式,或者做个delegate的方式来做的,表示侦听这个概念.你提到了轮询两个字,我猜你是误解了主动性的问题了.因为你没有提到你是用struts还是什么,我就不知道web.xml是不是有效了.如果是自己从头写,看那几个blog.
      

  5.   

    多谢各位热心解答!因为模式实现的是一个行为模型,或者叫机制,所以用和框架绑定的方式来实现肯定是不合适的在observer里面,由被监控的对象去通知行为的实现者自己的状态发生了变化是一种解决的办法,但是如果面对的是一些持久化的类,比如dataobject,就不得不一个类一个类地在更新里添加对应的函数了,这个在迭代开发里还是很常见的(当然也可以归咎于之前的需求和设计没做好)。这样做本身没什么问题,只是觉得效率低了点。如果能实现让一个类的对象负责监听工作且不依赖于被观察者的通知,发现了感兴趣的变化时再来调用相应的过程,是不是更好用一些呢?
    现在考虑用守护线程来做,虽然能实现,但总资源占用大了。
      

  6.   

    to: 老紫竹现在用守护线程来实现,确实有了点aop的味道,hehe
      

  7.   

    问题已经解决:
    http://blog.csdn.net/neonicholasi/archive/2008/01/14/2043133.aspx想法和老紫竹的差不多