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毫秒