注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

疯狂的阶梯

将八卦进行到底

 
 
 

日志

 
 

评 Head First Design Pattern

2006-08-10 23:04:46|  分类: 书评 |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |

xiecc于2005年8月5日

本来想趁着这周项目完成和暑假放假的难得的休息时间写点SpringFramework MVC深入分析的文章,然后再深入研究一下AOP的东西。可惜从itput上下载的一本电子书彻底改变了我的计划,呜呼,看来看书也会误事。这本书叫Head First Design Pattern,尽管以前听人说过这是本好书,而且得了Jolt震憾大奖,不过我当时好象不是太感兴趣。原因有二:第一,我对Jolt大奖的某些评奖有点感冒,比如去年中奖的《测试驱动开发实用指南》,虽然没仔细看,不过我觉得只是本很一般的书;而我最心爱的Expert One on One J2EE这样的经典名著从来没能得奖,今年Bruce Tate的那本当时我觉得不起眼的小书Better, faster, lighter Java居然能得技术类的震憾大奖,不知道评委的评审是什么标准。第二,我自认为看的设计模式的书虽然不算多,但也不少,而且常用的模式几乎都在项目中用过,呵呵,真是自我感觉良好。然而当我下载到这本书,经过大致浏览并看了相关评论后(能让Erich Gamma, Richard Helm, Ward Cunningham这样的大牛做出这么高的评价,这本书一定有它的独到之处。呵呵,偶最喜欢追星了),我忽然意识这是我必须要看的一本书。尽管扫描版不是那么的清晰,看着有点累,但是象我这种书迷是不在意这些的,好书是绝不能放过的,哈哈!显然这本书没有让我失望。

大致浏览这本书,会发现上面有好多的图片,好多好玩的对话,很多人会感觉这是一本轻松愉快的书。但是请记住:这本书不是花两天时间,一边看片,一边上网能读完的书,读这本书需要完全的集中精力,需要深入的思考,甚至做笔记。记得当年我看完Design Pattern Explained,总共只用了两天时间,感觉对它掌握得也相当不错。但是读完这本书我整整花了七天时间,而且读完一些章节后会感觉头脑有点爆炸。


这本书最大的优点是它的述事方式,实例、问答、图片、drama、采访、相互对话,各种各样刺激脑神经的方式都用上了,它让读者在读这本书的过程不停地进行互动、思考,难怪会这么累。不过只有这样的阅读才能带来最大的收获,各种模式的基本要点,在实例中的应用,模式间的细微差别,使用时的具体事项,看过这本书后都会有很大的加深。设计模式本身就是一种需要不断重复,不断实践,才能牢记并掌握的东西。记得以前经常听人说看GOF的Design Pattern看了五六遍,不知道他们看完后有多大收获,反正这种方法不适合我,Design Pattern我看过两遍以后就不看了,偶尔参考的时候才翻一下。我是那种需要不断有新东西来刺激才能学习的人,而这本Head first Design Pattern无疑是对我最好的刺激。从学习的角度来说,Head first Design Pattern绝对是比GOF的Design Pattern好很多的书,因为它的叙事方式远比Design Pattern那种平铺直叙的方法带来更大的头脑互动。


每一章的叙事的基本套路大概是这样的:1、提出一个设计上的问题。通常是现实生活中的例子,如设计会飞会叫的鸭子、天气数据监测、遥控器、卖咖啡、做Pizza等一系列有趣的问题。2、设计出一个比较滥的解决方案,然后问你这个解决方案有啥问题。3、分析这个解决方案存在的问题和缺陷,总结出它的缺陷,再提出比较合理的解决方案。中间会让用户互动地完成部分解决方案。4、将这个解决方案总结,最后变成设计模式,并给出了这种设计模式的定义。5、对这个模式进行升华,提出相关的注意事项和实际应用。6、最后给出总结。


当然每章中间会穿插好多有趣的东西,如重要的设计原则,对设计模式进行采访,两个模式之间的吵架,很多有启发性的问答,非常好玩的小故事等等。


当然这本书的亮点不仅仅是它的叙事方式,它还会提出很多我们以前不曾考虑或没仔细想过的一些问题。Observer模式里的push和pull方式的区别,Decorator模式会带来的问题,三种工厂模式的详细区别,singleton里要注意的多线程和多ClassLoader带来的问题,Command模式里的Invoker和Receiver角色,Template method里的hook,Iterator和Composite组合后的CompositeIterator。对dynamic proxy的分析是我见过最清楚、最好的讲解。甚至已经在Web应用中用滥了的MVC模式,看完之后都会有新的收获,因为Web上的MVC与传统的rich client的MVC差别太大了,看完之后会有恍然的感觉。


当然有些设计上的决定我还是觉得有点问题或不太同意。比如说第一章的Strategy模式使用后,我们接口里仍然会有performFly,虽然很多鸭子是不会飞的;Decorator模式里的例子不太有说服力,如果仅仅是计算饮料的价格,我觉得用Decorator模式完全是不必要的,简单的Composite会取得更好的效果,而且更直观;在Template method里硬把java的排序函数里Comparable接口的实现说成是Template method的一种变体,我仍然觉得牵强。不过无论如何,这绝对是一本可以打五星的好书。

  评论这张
 
阅读(1260)| 评论(7)
推荐 转载

历史上的今天

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2017