Programming 版 (精华区)
发信人: Sun (大灯泡), 信区: SoftEng
标 题: [Design Pattern] Observer
发信站: 哈工大紫丁香 (2001年04月13日16:48:20 星期五), 站内信件
发信人:Crystal_Y (小衲) 版面名称:SoftEng(1077)
标 题:[Design Pattern] Observer
发信站:中国科大BBS站 (Thu, 12 Apr 2001 14:08:02 )
标 记:精华
Observer说得还是对象间的联系,一对多,多个Observer监测一个Subject
的某些state
这个Pattern还是为了提高对象的reusability,减少coupling。
Module/View/Controller中View显示的内容源于Module中的数据,而
Module与View都应该各自独立,各自可以复用、继承和变化,而两者数据的
一致就是用Observer来实现的。
原理很简单:一个Subject知道有若干Observer依赖于它的某个state,
当这个state发生变化时,Subject能够Notify这些Observer进行Update,
Observer里可以保存一个Subject的引用以获得它的state
那么Subject是如何知道Observer的存在呢,通过Attach和Detach(换个
名字就是Register/Unregister)
Subject是如何保存那些Observer的信息呢?在Subject结构里保存一块
区域,或是来一个全局的Subject-Observer映射结构
Subject必然在它的一些methods里改变大家关心的state,这个时候
去Notify所有的Observer进行Update可以减少client的操作,但client如果能
在一次调用Subject的很多method后再Notify,则减少了不必要的Update。
一个Observer可以观察几个Subject,这样就要求Observer辨认对象类型
当一个Subject将要被删除的时候,同样去Notify一把,则可以保证Observer
里不会有悬空指针
Subject通知Observer的时候,可以提供很多信息(甚至可以包括有关
的最新状态);也可以只发一个通知,然后让Observer再去询问细节。
有个感受:具体的设计就是根据实际的情况,在各个不同的极端中取得平衡
呵呵
--
※ 来源: 中国科大BBS站 [bbs.ustc.edu.cn]
--
如果程序员懂得了软件工程,
那么他就不再是牛,
更不是妓女了。
※ 来源:·哈工大紫丁香 bbs.hit.edu.cn·[FROM: sunner.hit.edu.cn]
Powered by KBS BBS 2.0 (http://dev.kcn.cn)
页面执行时间:3.571毫秒