论坛首页 Java企业应用论坛

复习:观察者模式

浏览 8225 次
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
作者 正文
   发表时间:2011-10-19  
观察者模式主要是解决一对多的关系,比较一个常见的事件系统,可能有好几个模块都会关注一个事件,并且在运行过程中这些观察者会发生变化,那么在这个时候,用观察者模式再合适不过了
0 请登录后投票
   发表时间:2011-10-19  
阿市A 写道
引用

有这样的一个应用:
1. Log File Reader读取Log Text Line,并进行处理成Java Object
2. 把这个Java Object装进一个Subject里
3. 这个Subject配置了两个观察者,一个是用于更新到内部的cache,一个用于写db

如果以后我需要对这个text line有新的操作,我只需要往Subject里增加一个新的Observer实现即可,比如发JMS。

我最近刚学这方面的东西,就代码原理来看可不可以理解成:一个观察者处理一个单独的业务逻辑,例如存储DB,另一个观察者用来写入文件(例如XML文件)。假如有这样的需求,存入DB中得某些数据需要写入xml文件用来向别的接口发送消息。然后将两个观察者放入Subject这个盒子中,利用subject对象去回调每个观察者各自的方法?
我个人认为要是我自己写这样的需求,我将不会用到Subject这个盒子,它除了将观察者封装起来还有其他用途不?我更想了解这个盒子的使用场景。


你的理解可以说是正确正常的。设计模式并不是要你生搬硬套,其实设计模式遵循着“开放-封闭”原则,即对扩展开放,对修改封闭。就我说的例子,我加入新的功能,只需要加一个新的observer扩展进去就行了,而原来的代码的逻辑不需要去修改。具体使用要灵活应用,这个过程也许要经历一段时间,像悟“道”一样,慢慢就会了解了,我自己也在修炼过程中。
0 请登录后投票
   发表时间:2011-10-19  
我始终有一个问题搞不明白:
观察者模式 跟 广播 有什么区别?
这问题困扰我很久了
0 请登录后投票
   发表时间:2011-11-05  
观察者模式很经典 ,也到处用的着 ,又一次复习啦。
0 请登录后投票
   发表时间:2011-11-07   最后修改:2011-11-07
sniffer123 写道
我始终有一个问题搞不明白:
观察者模式 跟 广播 有什么区别?
这问题困扰我很久了

其实没有什么区别。

观察者模式还有一个名字叫“订阅(subscribe)/发布(publish)模式”。当你订阅消息源,消息源会把消息发布(广播)给每一位订阅者。这个就是你说的意思。

如果你说的广播,是指IP广播的话,套用这个思想就是:当你拿着一个IP的时候,你就已经“被订阅”了,因为发布者手上已经拿着你们的所有“名单”(255.255.255.255)。当要发布消息时,就可以枚举出所有的IP进行消息的发送,这就是IP广播了。

当然你可以对模式进行扩充,例如加入消息发布的过滤规则,这样就实现了只对部分订阅者进行发布,而不是无脑广播了。
0 请登录后投票
论坛首页 Java企业应用版

跳转论坛:
Global site tag (gtag.js) - Google Analytics