不知道是不是所有的Reference书,都是大块头,这本也不例外,整整1057页,也许大块头有大智慧吧。扫了一眼目录,对第33章的Creating a Download Manager in Java颇感兴趣,重点读了一下。这章首先简单介绍了下载的原理,然后用四个类做了一个精炼的实现。恰到好处的运用了观察者模式,代码让人看了赏心悦目(附有代码)。
OBSERVER 模式
JDK自身就带有观察者模式的实现。由java.util.Observable类和java.util.Observer接口组成。回顾一下观察者模式
目的
让系统内的一个或多个对象的状态变化得到通知。
示例
几乎所有的 GUI 场景中都可以找到观察者模式的影子。通常按钮,文本,其他输入框都会注册一个侦听事件,当用户触发了一个事件,比如点击了某个按钮,事件控制器将会给所有注册的观察者广播通知。
Download 类的 stateChanged( ) 方法
要使 Download Manager 能够实时展示下载信息,就需要知道每个下载任务当前具体什么状况。它又不是神,不可能凭空知道。观察者模式这时派上了用场。Download 类通过继承JDK自带的Observable工具类使用了观察者模式。Download 类继承 Observable 类后,光荣地成为被观察者。实现了 Observer 接口的DownloadManager 理所当然的成为观察者。每次 Download 发生了一点鸡毛蒜皮的小事,比如“嘿,我又下载了1%,厉害吧”,立马激活 stateChanged( ) 方法。stateChanged( ) 方法当即对着 Observable 类的 setChanged( ) 吼一声,告诉他我变了。然后再调用 Observable 类 notifyObservers( ) 向观察者报告。得到报告的 DownloadManager 更新这个下载任务的进度条,加上1%。
现在对观察者模式有了更进一步的认识,就如昨天51CTO植树节专题里的一篇文章所说,“千万不要为了学习框架而学习框架,而是要为了解决问题而学习框架”。不要为学习设计模式而学习设计模式,只有遇到实际问题,才能搞清楚事情的来龙去脉,把握住本质。
运行效果
在Eclipse中启动
复制一个Http的链接,下载一个Eclipse试试,http://mirror.bjtu.edu.cn/eclipse/technology/epp/downloads/release/helios/SR2/eclipse-java-helios-SR2-win32.zip
下载完成后,默认放在工程根目录。
JDownload
看完这个不得不让我想到了JDownload。\(^o^)/~,我对JDownload的爱,可以用一首歌来形容,很爱很爱你,所以愿意,通宵达旦,为你写多一点的代码。。。⊙﹏⊙b汗的是,到目前为止连他的代码都还没读过。今天读到这本书,又激起了我的热情。单独下了一个Eclipse,专门来整你,从这里http://svn.jdownloader.org/projects/show/jd 准备开始我的JDownload之旅。