读了阎宏博士的观察者模式...

zhangyunpeng 2004-10-21 09:20:03
这个模式和我现在做的这个业务很吻合。
业务是这样的:用户添写自己的提醒信息,包括提醒时间,提醒内容。当系统时间和用户的提醒时间相等的时候,便执行给该用户发送email的操作。
系统时间是被观察者,而用户设置的提醒时间是观察者,系统时间如果发生变化的时间,便会通知每一个观察者。

不知道我这样理解对不对,请大家指教.

...全文
507 12 打赏 收藏 举报
写回复
12 条回复
切换为时间正序
当前发帖距今超过3年,不再开放新的回复
发表回复
xlyyc 2005-03-21
  • 打赏
  • 举报
回复
mark
catblue 2004-12-01
  • 打赏
  • 举报
回复
学习
jeffyan77 2004-11-01
  • 打赏
  • 举报
回复
streamer技术本身是有专利和版权的,不能讲得太多。不过TCP是connection oriented,TCP Socket以stream通讯为基础,能够发送stream的服务器,就是streamer,这是大家都能想得到的。
quanquan626 2004-11-01
  • 打赏
  • 举报
回复
学习
jeffsonxl 2004-11-01
  • 打赏
  • 举报
回复
"解决这个问题需要采用socket编程,使用一种通常称作streamer的技术,这基本上就是华尔街编程的顶级层次了", 阉博士,能不能讲的再具体些,谢谢.
cold_blooded 2004-10-31
  • 打赏
  • 举报
回复
楼上说的有理,
表示钦佩,
不过对于楼主的应用,
愚见认为没问题.
jeffyan77 2004-10-29
  • 打赏
  • 举报
回复
扫描的方法在一些简单情况下是可以的,但是不值得推荐。在很多情况下,扫描行不通。

扫描是pull架构,也就是使用端不断要求服务端提供某状态,以便在服务端状态发生某种变化的时候采取某行动。这会造成大量无用的请求和回复。

观察者模式可以用来实现push架构,也就是服务端在内部状态满足某一条件的时候,主动通知使用端,以便使用端采取某行动。只有在满足条件的时候,服务端才发通知,使用端才有行动。这在最大程度上节省了系统资源,提高了系统的效率。

在观察者和被观察者同处于一个JVM的情况下,观察者模式本身就足以提供push架构。

在两者处于不同的JVM中的时候,观察者模式本身不能解决push架构的功能问题。一个最为常见的例子,就是股票价格的报价系统。假设你有一个Java Applet放到网页上,不断显示某些股票的价格。如果由使用端不断向服务器请求这些价格,不论这些价格有没有变化,那么系统根本无法承受大量客户。经过我们的测试估计,在美国股市情况下,这种盲目的请求和报价的99%是无用的。换言之,为了支持譬如10万个用户,你需要大量的系统资源,特别是硬件资源,但是99%都被浪费掉了,就是因为软件设计的缺陷。

如果能够采取push架构,如果原先支持10万人需要200台服务器,现在只需要两台服务器。在从两台加到20台,就可以轻而易举地支持100万个用户。

当然,观察着模式本身并不能够解决这个报价系统中所有的问题,采取具有合适功能的技术,辅助以观察者模式才能真正实现push架构。HTTP协议不能有效支持push,一个http服务器不能在自己认为合适的时候,主动向使用端发出信息。JDBC也不能从数据库服务器主动送出数据,J2EE技术本身也没有提供相关的功能。这当然不是一个设计模式能够解决的。解决这个问题需要采用socket编程,使用一种通常称作streamer的技术,这基本上就是华尔街编程的顶级层次了。
treeroot 2004-10-29
  • 打赏
  • 举报
回复
可以指定的时间间隔扫描一次
zwp315 2004-10-28
  • 打赏
  • 举报
回复
顶~~
wwwer1 2004-10-21
  • 打赏
  • 举报
回复
是观察者一直在关注的周围环境的变化(当然不一定是精确到每一秒)
这就需要监听机制。建立一个listener类,要保证这个类在系统运行期间不被垃圾收集器收集。
然后,过一定的单位时间就检查一次业务逻辑。这个业务逻辑和单位时间是你来设定的。
zx209 2004-10-21
  • 打赏
  • 举报
回复
想学模式了
tom2005 2004-10-21
  • 打赏
  • 举报
回复
学习
相关推荐
发帖
Java

4.9w+

社区成员

Java相关技术讨论
javaspring bootspring cloud 技术论坛(原bbs)
社区管理员
  • Java相关社区
  • 小虚竹
  • 谙忆
加入社区
帖子事件
创建了帖子
2004-10-21 09:20
社区公告
暂无公告