设计模式应用与发展之观察者模式(java)

更新时间:2023-03-08 05:46:32 阅读量: 综合文库 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

设计模式应用与发展之观察者模式

1 2 3 4

引子........................................................................................................................................... 2 望断天涯路 ............................................................................................................................... 2 家书抵万金 ............................................................................................................................... 2 网络是原罪 ............................................................................................................................... 4

1 / 4

1 引子

话说上一篇中的门面模式已然跻身云端,而猿人们仍在地面唏嘘??

关于设计模式,有人追捧,有人崇拜,也有人束之高阁;追捧的为模式而模式着,崇拜的始终原地膜拜着,束之高阁的则扮演路人打着酱油。然而,这都不是程序猿人自我进化的正确道路;因知其始,方知其行,而后知其终。

今天继续我们的第三篇探讨:观察者模式之始末。

2 望断天涯路

小时候听老师讲史记,其中有一段说大禹同学受了皇命,抛下尚未圆房的娇妻涂山氏,匆匆赶赴洪灾现场,亲自督促指挥,治理洪患。话说这理科屌丝男还真就是缺筋少弦,十几年下来,三次经过老家都不回去一趟。涂山氏一个大花姑娘的,还没圆房就跑了老公,心里火热着就盼太阳落西山沟啊,就天天的,跑到村口的大石上,踮脚顾盼,望穿秋水。这初恋情,深似海,不想一望就是十几年,花姑娘望成了中年妇女,大禹才回来。恩,据说那块石头现如今成了非著名景点,号:望夫石。

后来,老师又给讲战国了,那时候不是魏打燕,就是齐打楚,最牛逼的就是秦了,见谁打谁。天天的,到处抓壮丁,奔赴了战场,一个个的,死的凄惨,连爹妈都认不出来,马革裹尸就更是奢望了。一到抽丁队来了,便觉风萧萧兮浑身冷冰冰,易水刺骨寒;全村上下哭的稀里哗啦,聚到村口给壮士们送别,这一去兮不复还。

听到悲凉处,真心觉得凄惨,暗叹当世生活还是很美好的,没有那么多生离死别。直到某一天,当我化身程序猿人,调用了另一个猿人的模块接口:

...

// 调用zip工具解压

ZipUtils.unzip(\System.out.println(\解压完成\...

看得出来,ZipUtils就是另一个猿人写的模块了。

代码很简单,也很容易懂,我立刻有种膜拜的冲动:这简直就是神作啊。

但很不幸,我常常觉得自己就是幽怨的涂山氏,坐在转椅上望穿秋水,期待着“解压完成”能出现在我的视线里;我经常看到的是Stack Trace输出,我的unzip调用就像壮士们出征一样,风萧萧兮不复还。

3 家书抵万金

老师说了,历史的车轮始终是滚滚向前的。

随着社会进步,特别是造纸术发明之后,读书人渐渐多了,人们便也开始矫情起来,会舞文弄墨了。这不烽火连三月,家书抵万金嘛。一张薄纸,却沉甸甸的;当然书中有喜有忧,但至少不是一等十几年,也不再是薛定谔的猫了。

我找到ZipUtils猿人,在夜宵摊上就着酒劲,告诉他我讨厌Stack Trace,我讨厌无力的等待。ZipUtils猿人仰望着星空,若有所思,当夜便高举设计模式大旗,大刀阔斧的进行了改革;终于在一个黑夜过后,他走出了办公室,却迎着朝阳走进了一个新时代:

2 / 4

public class ZipUtils extends Observable { ... // 保存当前正在处理的文件名 private String currentFileName; ... // 解压zip文件到指定目录 public boolean unzip(String zipFile, String unzipDir) { ... try { // 打开zip文件输入流 ZipInputStream zin = new ZipInputStream(new FileInputStream(zipFile)); // 取zip压缩项 ZipEntry entry = zin.getNextEntry(); while(entry != null) { ... // 设置当前正在处理的文件名 currentFileName = entry.getName(); // 改变状态 this.setChanged(); // 通知观察者 this.notifyObservers(); ... } ... } catch(…) { ... return false; } return true; } // 保存当前正在处理的文件名 public String getCurrentFileName() { return currentFileName; } ... }

ZipUtils猿人兴奋的告诉我,他在一宿的闭关中,触摸到了道。 啥?道?我不明白。

我只知道他让我修改我的代码,按照他的指导,我小心翼翼,如履薄冰,修改了我的代

3 / 4

码:

public class OhMyGod implements Observer { ... private ZipUtils zip = new ZipUtils(); ... public void beg() { // 添加观察者 zip.addObserver(this); // 解压 boolean success = zip.unzip(\ System.out.println(\ } public void update(Observable o, Object arg) { // 输出当前被解压的文件名 System.out.println(\ } … }

我看着这些被我增加的代码,心里充满了疑惑。这就行了?怎么多了这么多代码? 直到我和ZipUtils猿人恭敬立在屏幕前,看着一行行的信息输出,我长舒了一口气。而从此之后,在我的眼中,ZipUtils猿人也开始浑身泛起金光。

事情还没完,ZipUtils的兴奋仍在持续,他拉着我的小手,跟我说这是一种设计模式的应用,他的名字叫观察者,他不光能展示ZipUtils的运行过程,他还能被多个对象同时观察,云云??

4 网络是原罪

我早已经不再是学生,而社会的进步更是超乎人们的想象,我们已经步入一个信息泛滥的时代。在这个时代,你登录了QQ,你所有的好友都会知道你已经上线。你发了一条微博,所有关注你的人,立刻会收到一条通知。噢,你丢了一个U盘?那么恭喜你,你很快就要出名了。

多年的程序猿人生涯,我接触了更多的模块,更大规模的系统,更复杂的业务逻辑。但我发现,观察者模式依然坚挺适用,只是看上去稍微换了些许模样;甚至更进一步,我们采用了更具规模的各种中间件来实现,比如JMS,比如ActiveMQ??

4 / 4

本文来源:https://www.bwwdw.com/article/3a2.html

Top