锁定老帖子 主题:读《漫谈设计模式》
该帖已经被评为隐藏帖
|
|
---|---|
作者 | 正文 |
发表时间:2011-12-30
最后修改:2011-12-30
cheney_love 写道 george_space 写道 george_space 写道 《漫谈设计模式》没有买,所以不做评价。
我以前买过《研磨设计模式》,总体的感觉是: 优点: 1、包装很精美; 2、文章编排很拉风,代码段重点部分都高亮圈起来,代码部分格式很清晰(指得是代码文字的编排格式,不是指代码内容本身的命名规范拉风); 3、纸张质量很高,用纸白、厚,纸上的文字清晰、漂亮; 缺点: 文中举的例子,对于实际写程序的人来说太虚,很多都是作者自己假设的情景,这样不利于作为文章受众的程序员在实际开发中去应用。 文章中很多例子,比如组装电脑、电脑开机、饭店点菜、订报纸等等,这些例子,虽然是日常生活中很常见的事情,但是对于实际的软件开发者来说,把这些例子所讲述的设计模式应用到实际的项目开发中,是不容易的。 所以,我对写设计模式书籍的作者的建议是: 文中举例最好用软件开发中常见的实际情景,不要用虽然贴近生活,却远离实际开发的例子。 每个设计模式都应该使用软件开发中实际用到的情景作为例子, 比如策略模式的例子可以用 数据列表的数据权限控制做例子; 职责链模式的例子可以用 MVC框架中的URI解析的步骤做例子; 代理模式可以用 excel 2003的解析、excel 2007的解析、文本文件的解析作为例子; 命令模式可以用 自定义字段/内容模型 作为例子; 等等。 如果能够用一本书,从0开始讲述一个 WEB 平台的开发全过程,同时把gof23种设计模式在这一个WEB 开发平台中逐一应用,那这样一本书肯定会大卖。 这本书得多厚? 和《代码大全》差不多厚就可以了,实在不行可以分卷,第一卷,第二卷……第六卷,我估计不会出到第八卷。 |
|
返回顶楼 | |
发表时间:2011-12-30
george_space 写道 george_space 写道 《漫谈设计模式》没有买,所以不做评价。
我以前买过《研磨设计模式》,总体的感觉是: 优点: 1、包装很精美; 2、文章编排很拉风,代码段重点部分都高亮圈起来,代码部分格式很清晰(指得是代码文字的编排格式,不是指代码内容本身的命名规范拉风); 3、纸张质量很高,用纸白、厚,纸上的文字清晰、漂亮; 缺点: 文中举的例子,对于实际写程序的人来说太虚,很多都是作者自己假设的情景,这样不利于作为文章受众的程序员在实际开发中去应用。 文章中很多例子,比如组装电脑、电脑开机、饭店点菜、订报纸等等,这些例子,虽然是日常生活中很常见的事情,但是对于实际的软件开发者来说,把这些例子所讲述的设计模式应用到实际的项目开发中,是不容易的。 所以,我对写设计模式书籍的作者的建议是: 文中举例最好用软件开发中常见的实际情景,不要用虽然贴近生活,却远离实际开发的例子。 每个设计模式都应该使用软件开发中实际用到的情景作为例子, 比如策略模式的例子可以用 数据列表的数据权限控制做例子; 职责链模式的例子可以用 MVC框架中的URI解析的步骤做例子; 代理模式可以用 excel 2003的解析、excel 2007的解析、文本文件的解析作为例子; 命令模式可以用 自定义字段/内容模型 作为例子; 等等。 如果能够用一本书,从0开始讲述一个 WEB 平台的开发全过程,同时把gof23种设计模式在这一个WEB 开发平台中逐一应用,那这样一本书肯定会大卖。 我记得,一位大牛曾经说过一个故事说: 有人向他写信,说他把GoF的22个模式都在系统使用了,就剩下一个解释器模式没有使用,他实在没有办法找出来可以使用的地方。 我们要使用,只是它合适解决问题,还要变化它们(因为你的问题和它提到问题总是有出入的),来调整以解决自己的问题,本质是面向对象(gof说的,是把有经验的开发设计者的经验告诉大家),因为,你懂面向对象的话,就不用知道这些模式,你也会遇到相同的问题,找到你的解决方案,而这个解决方案,和23个被有经验的设计者归纳出来的应该是一样的。 |
|
返回顶楼 | |
发表时间:2011-12-30
最后修改:2011-12-30
redhat 写道 zuiyanwangyue 写道 看了之后才知道上了大当,很多内容在阎宏博士的《设计模式》中都有描述,无非是照葫芦画瓢,强烈建议大家不要买
不是嘲笑你,你知道什么是设计模式吗? 1.我想所有设计模式都是剽窃GoF的书籍(知道GoF是谁吗?),或者这么给你说:所有java23种设计模式的,你给我在这个世界上找一本不是有相互影子的? 2.另外,我只开放了部分,你怎么知道很多剽窃的? 3.写此书时,参考内容都写在参考附录里了,从来没有一处得自于那里,可以去查看:http://redhat.iteye.com/blog/1044615,这里的基本是我参考的书籍。 4.不要拿我的书籍和阎宏博士的比较: 1).我的书籍都有详细的参考,从来谨慎言语。 2).为了写此书,删除了好多内容,几乎一个月写的都删除,从来不是把自己知道的全写在里面,而是完全相关的。我想GoF写模式时,绝对知道C++,还好没有讲C++语法。 3).请此书作者撰写《Java与模式》时,至少读读亚历山大的那本书籍,特别是最后讲本质的一章。对不懂的人谈模式,深表遗憾! 5.希望你不是阎宏本人和最熟悉的人。 6.别拿博士压人,给出严谨的内容,这个才可以压人。 此外,不知道我是否有得罪于你,从来没有发现,请您至少读完书籍在发言,对此,还是表示歉意。 声明:本人既非阎宏本人也非最熟悉的人 而是他的书的受益者 redhat说我不懂设计模式,那我就以局外人的身份浅略谈一下看法: 要想要把设计模式解释清楚,首先应该向人家解释清楚某种模式适用的场景、内部有哪些组件构成以及各自的责任,模式中的组件本身不是自调用的,所以还要把调用者的责任解释清楚,以及将来需求发生变化时我们所采用的模式是如何降低需求对代码产生的影响的。我记得在阎宏的《Java与模式》中没各章节还谈到了正在介绍的模式与其它模式之间的区别和联系,这些都很能帮助我们在实际场景中选择合适的模式。 不成熟的看法:不把模式放到大的场景中去讨论是没有意义的,有道是不谋全局者不足以谋一域,而贵书对设计模式的讨论仍还在一域的境界,《Java与模式》中则含大局观。 |
|
返回顶楼 | |
发表时间:2011-12-30
声明:本人既非阎宏本人也非最熟悉的人 而是他的书的受益者
redhat说我不懂设计模式,那我就以局外人的身份浅略谈一下看法: 要想要把设计模式解释清楚,首先应该向人家解释清楚某种模式适用的场景、内部有哪些组件构成以及各自的责任,模式中的组件本身不是自调用的,所以还要把调用者的责任解释清楚,以及将来需求发生变化时我们所采用的模式是如何降低需求对代码产生的影响的。我记得在阎宏的《Java与模式》中没各章节还谈到了正在介绍的模式与其它模式之间的区别和联系,这些都很能帮助我们在实际场景中选择合适的模式。 不成熟的看法:不把模式放到大的场景中去讨论是没有意义的,有道是不谋全局者不足以谋一域,而贵书对设计模式的讨论仍还在一域的境界,《Java与模式》中则含大局观。 终于不是吵架了哈, 引用 把模式放到大的场景中去讨论
不明白,小的场景为什么不能使用,只有大的场景才可以使用,讨论才有意义,我觉得GoF的任何一个模式都不是大的场景,至于场景,组件(对象),即各自的责任,没有介绍怎么讲模式?突然冒昧问一句,怎么体现那些组件和各自的职责?组件和对象的关系,职责和封装的方法的关系,您弄清楚了吗? |
|
返回顶楼 | |
发表时间:2011-12-30
最后修改:2011-12-30
redhat 写道 zuiyanwangyue 写道 看了之后才知道上了大当,很多内容在阎宏博士的《设计模式》中都有描述,无非是照葫芦画瓢,强烈建议大家不要买
不是嘲笑你,你知道什么是设计模式吗? 设计模式不是写了书了才有权利说懂的,以您的“从回家过年说起”为例,个人觉得这个例子并不足以体现模板模式的好处,这里你仅考虑到了乘坐不同的交通方式,但是考虑再复杂一点,即使是乘坐大巴,可能有的人去丽泽桥、有的人去赵公口...(以北京为例),现在的实际情况是买票也要去车站买(长途汽车暂不支持网络购票),那用你的思路要写很多个子类吧。假设万一哪天有了个公共订票平台(可以定火车票和长途汽车票),您所有子类的订票方法是不是要重写呢?? 其实大可不必整的这么高深,组合模式大多数人都熟悉,把订票定义成一个接口OrderTicket然后让您的HappyPeople项下面这样: pubclic class HappyPeople{ public void celebrateSpringFestival(OrderTicket ot){ ot.orderTicket();//订票逻辑 ......//其它逻辑 } } 我觉得在这个场景中“乘车”和“与家人团聚”也可仿照“订票”被抽象成接口,因为有的人与家人团聚就是吃饺子、而有的人看电影、有的人....总之情况很多很多。这样改造后就可以实现每个HappuyPeople有各自的订票方式、各自的乘车方式、各自与家人团聚的方式、而订票、乘车、与家人团聚的具体实现也能得到最大程度的复用。 综上,你以这个场景介绍模板方法个人认为太牵强。 为了用模式而用模式,并不利于问题的解决,其实我上面仅仅用了OO!!!!!! |
|
返回顶楼 | |
发表时间:2011-12-30
zuiyanwangyue 写道 redhat 写道 zuiyanwangyue 写道 看了之后才知道上了大当,很多内容在阎宏博士的《设计模式》中都有描述,无非是照葫芦画瓢,强烈建议大家不要买
不是嘲笑你,你知道什么是设计模式吗? 设计模式不是写了书了才有权利说懂的,以您的“从回家过年说起”为例,个人觉得这个例子并不足以体现模板模式的好处,这里你仅考虑到了乘坐不同的交通方式,但是考虑再复杂一点,即使是乘坐大巴,可能有的人去丽泽桥、有的人去赵公口...(以北京为例),现在的实际情况是买票也要去车站买(长途汽车暂不支持网络购票),那用你的思路要写很多歌子类吧。假设万一哪天有了个公共订票平台(可以定火车票和长途汽车票),您所有子类的订票方法是不是要重写呢?? 其实大可不必整的这么高深,组合模式大多数人都熟悉,把订票定义成一个接口OrderTicket然后让您的HappyPeople项下面这样: pubclic class HappyPeople{ public void celebrateSpringFestival(OrderTicket ot){ ot.orderTicket();//订票逻辑 ......//其它逻辑 } } 我觉得在这个场景中“乘车”和“与家人团聚”也可仿照“订票”被抽象成接口,因为有的人与家人团聚就是吃饺子、而有的人看电影、有的人....总之情况很多很多。这样改造后就可以实现每个HappuyPeople有各自的订票方式、各自的乘车方式、各自与家人团聚的方式、而订票、乘车、与家人团聚的具体实现也能得到最大程度的复用。 综上,你以这个场景介绍模板方法个人认为太牵强。 早说了 例子就那么几个 为了避免直接抄例子 人家说是法拉利 他用土话 说个拖拉机 |
|
返回顶楼 | |
发表时间:2011-12-30
yangguo 写道 对楼主这种人真是懒得教化,隐藏死你个白痴。
我是来讨论问题的 不是和你们骂阵的 |
|
返回顶楼 | |
发表时间:2011-12-30
782478585 写道 zuiyanwangyue 写道 redhat 写道 zuiyanwangyue 写道 看了之后才知道上了大当,很多内容在阎宏博士的《设计模式》中都有描述,无非是照葫芦画瓢,强烈建议大家不要买
不是嘲笑你,你知道什么是设计模式吗? 设计模式不是写了书了才有权利说懂的,以您的“从回家过年说起”为例,个人觉得这个例子并不足以体现模板模式的好处,这里你仅考虑到了乘坐不同的交通方式,但是考虑再复杂一点,即使是乘坐大巴,可能有的人去丽泽桥、有的人去赵公口...(以北京为例),现在的实际情况是买票也要去车站买(长途汽车暂不支持网络购票),那用你的思路要写很多歌子类吧。假设万一哪天有了个公共订票平台(可以定火车票和长途汽车票),您所有子类的订票方法是不是要重写呢?? 其实大可不必整的这么高深,组合模式大多数人都熟悉,把订票定义成一个接口OrderTicket然后让您的HappyPeople项下面这样: pubclic class HappyPeople{ public void celebrateSpringFestival(OrderTicket ot){ ot.orderTicket();//订票逻辑 ......//其它逻辑 } } 我觉得在这个场景中“乘车”和“与家人团聚”也可仿照“订票”被抽象成接口,因为有的人与家人团聚就是吃饺子、而有的人看电影、有的人....总之情况很多很多。这样改造后就可以实现每个HappuyPeople有各自的订票方式、各自的乘车方式、各自与家人团聚的方式、而订票、乘车、与家人团聚的具体实现也能得到最大程度的复用。 综上,你以这个场景介绍模板方法个人认为太牵强。 早说了 例子就那么几个 为了避免直接抄例子 人家说是法拉利 他用土话 说个拖拉机 正解... |
|
返回顶楼 | |
发表时间:2011-12-30
redhat 写道 声明:本人既非阎宏本人也非最熟悉的人 而是他的书的受益者
redhat说我不懂设计模式,那我就以局外人的身份浅略谈一下看法: 要想要把设计模式解释清楚,首先应该向人家解释清楚某种模式适用的场景、内部有哪些组件构成以及各自的责任,模式中的组件本身不是自调用的,所以还要把调用者的责任解释清楚,以及将来需求发生变化时我们所采用的模式是如何降低需求对代码产生的影响的。我记得在阎宏的《Java与模式》中没各章节还谈到了正在介绍的模式与其它模式之间的区别和联系,这些都很能帮助我们在实际场景中选择合适的模式。 不成熟的看法:不把模式放到大的场景中去讨论是没有意义的,有道是不谋全局者不足以谋一域,而贵书对设计模式的讨论仍还在一域的境界,《Java与模式》中则含大局观。 终于不是吵架了哈, 引用 把模式放到大的场景中去讨论
不明白,小的场景为什么不能使用,只有大的场景才可以使用,讨论才有意义,我觉得GoF的任何一个模式都不是大的场景,至于场景,组件(对象),即各自的责任,没有介绍怎么讲模式?突然冒昧问一句,怎么体现那些组件和各自的职责?组件和对象的关系,职责和封装的方法的关系,您弄清楚了吗? 我说的大场景是指模式内部组件之外的场景。 |
|
返回顶楼 | |
发表时间:2011-12-30
最后修改:2011-12-30
redhat 写道 突然冒昧问一句,怎么体现那些组件和各自的职责?组件和对象的关系,职责和封装的方法的关系,您弄清楚了吗?
很显然,“从回家过年说起”中HappyPeople的订票、乘车、与家人团聚是整体业务逻辑与局部业务逻辑之间的关系,您觉得用模板方法比用组合更合适吗? 如果您实在不理解模板方法的精髓,建议你好好想想Servlet是怎么回事,这是模板方法的经典用法。 |
|
返回顶楼 | |