也谈观察者Observer

      最近学习了微软关于smart client的一些介绍,确实强。结合了c/s开发快且界面易用和b/s易于维护性的优势,做到winform的界面利用本机资源,online or offline,no touch的部署。很有吸引力。介绍smart client的一个demo:issuevistion中用到了observer和command模式,是把UI和数据解耦。实现易扩展和申缩性强。体现了模式的强大。里面有一句话让我感触很深,它说模式就是把类的职权分清,不知道大家有没有同感,我觉得说的很好。

现在来学习一下observer模式。这个模式主要是用于界面层。体现在界面上的连动效果,比如一个或几个窗体同时展现了相关的数据,且当一个数据源变化的时候,其它数据也需要做出相应的变化。例如在HR系统中选择职员树,右边有几个地方需要展示职员的基本资料,职员的任职职位信息,还有职员的兼职职位等。当职员变化时,对应的任职职位和兼职职位也作相应的变化。任兼职职位的变化应该是随着职员的变化主动变化,而不是被动的改变。这样的好处是当增加了职员的能力素质显示时,不需要在职员变化的类中再改,只需要能力素质类中加入对职员变化的处理方法就行了。

看看observer模式,有一个Isubject接口,用于掌握数据变化的类实现此接口,通常有一个注册观察者的方法需要实现。另一个是IObserver接口,需要接受改变的类实现的接口,并且有一个当数据变化时需要做什么的方法需要实现。

public interface ISubject     {
         
void registerInterest(IObserver obs);
    }


public interface IObserver     {
        
void sendNotify(string message);
    }

让展现职员树的类实现ISubject接口,显示职员任职兼职信息的类实现IObserver接口就是了,以后增加了职员的其它变化,同样实现IOserver接口就行了,最多在ISubject实现类中把此类注册进来就行了。

此时当职员发生变化时,通过找到IObserver的所以子类,并执行sendNotify就行了。是不是很简单,是不是把类的职权分的很清楚。

posted on 2004-12-29 14:51  蝈蝈  阅读(852)  评论(12编辑  收藏  举报