社区
Java
帖子详情
Java观察者模式的困惑
一存
2012-06-26 11:07:22
请问Java观察者模式都是在什么情况下使用啊,我找了些资料看了下,说在订新闻然后新闻上有消息时通知已经注册的用户。代码我也看了,但是实际操作起来怎么用啊,个人感觉直接通过SQL文查出来都有哪些用户订阅了新闻然后一个for循环把消息发出去不就行了么,那么这个观察者模式到底有什么用呢?还是某个程序能把所有用户信息一直存在对应的对象中,有消息的时候直接通知这些用户?
比较啰嗦,但真的很疑惑。
...全文
1039
8
打赏
收藏
Java观察者模式的困惑
请问Java观察者模式都是在什么情况下使用啊,我找了些资料看了下,说在订新闻然后新闻上有消息时通知已经注册的用户。代码我也看了,但是实际操作起来怎么用啊,个人感觉直接通过SQL文查出来都有哪些用户订阅了新闻然后一个for循环把消息发出去不就行了么,那么这个观察者模式到底有什么用呢?还是某个程序能把所有用户信息一直存在对应的对象中,有消息的时候直接通知这些用户? 比较啰嗦,但真的很疑惑。
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
8 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
程序男
2014-08-11
打赏
举报
回复
正好在看设计模式之禅:这里给出观察者模式的使用场景和案例: 观察者模式的使用场景 1.关联行为场景,注意,关联行为是可拆分的,而不是“组合”关系。 2.事件多级触发场景, 3.跨系统的消息交换场景,如消息队列的处理机制。 最佳实践 1.文件系统 在文件下新建一个文件,这个动作会同时通知目录管理其增加该目录,并通知磁盘管理器减少1KB的内存空间,也就是说”文件“是一个被观察者,”目录管理器“和“磁盘管理器” 是观察者。 2.猫鼠游戏 猫的叫声,引起了老鼠和主人的响应。 3.ATM取钱 4.广播收音机 5.SSH三大框架对Bean的操作用到了这种模式。、 6.基于观察者模式的委派事件模型(Delegation Event Model或DEM 在AWT中常见)。 这些设计模式要在具体场景分析完后再参照某些设计原则和模式案例来满足自己的业务需求。
乔山
2013-09-26
打赏
举报
回复
温故而知新,学习了。总结上面说的几点要义: 通过 集合 + 接口 来实现,于是才形成了解耦合 定义对象间的一种一对多的依赖关系,当一个对象的状态改变时,所有依赖于它的对象都得到通知并被自动更新。 在java gui编程中,在一个Jpanel(A)中有N个JPanel(B),A的大小是可调的,并且A的大小会影响到B的大小及内容。故将A做为Observable,B在A处注册并成为A的Observer,每次改变A的大小都会同时改变B的大小及内容。
一存
2012-06-28
打赏
举报
回复
谢谢大家的解答,我最近正在看《研磨设计模式》这本书,感觉观察者模式最大的特点就是动态联动了吧,当然解耦也是一方面。说Java中Swing的事件处理就是观察者模式的。看了看书,再加上大家的帮忙,感觉理解了挺多了,第一次发帖就有这么多好心人,泪奔ing...
ShaneLooLi
2012-06-27
打赏
举报
回复
[Quote=引用 4 楼 的回复:]
它的适用性,比如一条是:
当对一个对象的改变需要同时改变其它对象,而不知道具体有多少对象有待改变。
[/Quote]
嗯,是的。意思是说这些需要改变的对象,是程序运行起来才能知道的,而在编程的时候不能显式地知道。
不过其实就算编程时知道要改变几个对象,依然可以使用观察者模式。无论怎么应用,其要义,就是由先改变的对象,主动调用待改变的对象的某些方法。因为这种调用可以通过 集合 + 接口 来实现,于是才形成了解耦合的效果。不然不能解耦合。
brightyq
2012-06-26
打赏
举报
回复
观察者模式意图:
定义对象间的一种一对多的依赖关系,当一个对象的状态改变时,所有依赖于它的对象都得到通知并被自动更新。
它的适用性,比如一条是:
当对一个对象的改变需要同时改变其它对象,而不知道具体有多少对象有待改变。
LZ找一个设计模式的书看下,体会下实现思路,看出问题后再在论坛上问这样效果更好点。
ak47wjs
2012-06-26
打赏
举报
回复
观察者模式其实就是为了解偶,如果按你所说的直接通知的话,那你就需要获得该对像的引用,如果那天你的程序需要实现别外一种订阅(非用户)那就就需要更改代码了,这就违背了开-闭原则,利用观察者模式的话就只需实现监听器接口,并加入即可。
MultiArrow
2012-06-26
打赏
举报
回复
观察者模式的应用场景?我在java gui编程中使用过,大体是在一个Jpanel(A)中有N个JPanel(B),A的大小是可调的,并且A的大小会影响到B的大小及内容。故将A做为Observable,B在A处注册并成为A的Observer,每次改变A的大小都会同时改变B的大小及内容。
楼主所说的那种情况,SQL都都把订阅的用户查出来,那就用不着观察者模式了。
ShaneLooLi
2012-06-26
打赏
举报
回复
关于编程模式,我有一点告诫。编程原则(Principle)是真正应该去理解其发生来源与实际意义的东西。编程模式本身是别的程序员在编程过程中,总结出的一些定式,就像物理公式一样。物理和数学不一样,光应用公式是学不好的,主要还是理解机理,从而可以自己临时开发出各种公式。
对于一个好的程序员来说,平时编程应该多多思考自己程序和编程原则的契合。至于模式,主要应该是顺便总结出来的,就算不总结也不是太严重的事情。只有偶尔遇到了障碍想不出好的解决方法,或者有时间学习别人的编程经验之时,才接触别人的编程模式,从而产生一些启发或者感想什么的。
我们不应该把编程模式作为学习编程的基准。要有自己随便一想,就能找到经典编程模式在某种条件下不合用之处的自信。
接下来,来解释一下观察者模式。程序过程都是由某些开端开始的。这种开端可以是用户操作,可以是某一个时间到了于是开始定时任务,可以是一个不断循环的过程终于满足了什么条件,或者一些传感器来了信号,等等。由这些开端开始,程序一步一步往下执行。在 Java 中就是开端方法中调用了某个别的对象的方法,在调用的方法中又继续调用了方法,以此逐步进行。
观察者模式,是一种调用组织方式的编程模式。其意味着由事件开端,主动去调用下一步该执行的方法。比如你说新产生了一条新闻。那么软件系统咋知道新产生了一条新闻?很可能是新闻提供商调用了系统的 WebService 接口,传入了一条新的新闻内容对吧?以此为例。那么观察者模式,就是在这个新闻内容传入之后,立刻开始检索数据库,看都有谁订了新闻,然后逐一发送邮件或者某种形式的通知。
并不是非得这样设计呀。可以将新闻记入数据库。以后订阅者谁执行了“读取新闻”操作,再临时搜索一遍数据库看有没有新闻。你看,这至少就是二种程序执行过程的组织方法。第一种的思路,就和观察者模式的思路是一样的。
可以说,如果一个程序过程,里边要并列地调用好几个对象的方法,而且这些调用是平级不分先后的,那么这种设计其实就已经可以叫做“观察者模式”了。需要在什么时候使用什么组织方式,应该建立在思考程序效率的基础上。如果硬件条件足够好,那么就变成了“能实现就行”。当然了,作为程序员,我们可能需要自己要求自己;以后这种要求,会给你的职业生涯带来很多益处。
Java
设计模式——
观察者模式
本文通过两个实例(分别是“气象观测站”和“计时器应用”),对
Java
设计模式中的
观察者模式
做一个详细的说明。
小事例让你快速理解
java
观察者模式
java
观察者模式
观察者模式
--彻底理解运用
Java
设计模式之
观察者模式
定义与意义:
观察者模式
是对象的行为模式,它定义了一种一对多的依赖关系,让多个观察者对象同时监听某一个主题对象。当主题对象在状态上发生变化时,会通知所有观察者对象,使它们能够自动更新自己。 我们又把这种模式成为发布--订阅模式(Publish/Subscribe)或者模型-视图模式(Model/View)模式。该模式的最重要作用是解耦,将被观察者和观察者进行解耦,使得它们的依...
观察者模式
监听
java
_
Java
设计模式(三)——
观察者模式
和监听器
为了实现多个模块之间的联动,最好的方法是使用
观察者模式
。网上介绍的资料也比较多,今天我就从另一个方面谈谈自己对
观察者模式
的理解。从JDK提供的支持库里,我们能够找到四个对象:Observable、Observer、EventListener、EventObject。先模拟一个后台处理过程:import
java
.util.Observable;public class Subject extends...
java
observable类,利用
Java
提供的Observer接口和Observable类实现
观察者模式
对于
观察者模式
,其实
Java
已经为我们提供了已有的接口和类。对于订阅者(Subscribe,观察者)
Java
为我们提供了一个接口,JDK源码如下:package
java
.util;public interface Observer {void update(Observable o, Object arg);}和我们上一篇实现的观察者一样,仅提供一个update方法用于接收通知者的通知做出相应改...
Java
50,533
社区成员
85,617
社区内容
发帖
与我相关
我的任务
Java
Java相关技术讨论
复制链接
扫一扫
分享
社区描述
Java相关技术讨论
java
spring boot
spring cloud
技术论坛(原bbs)
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章