学习GoF 设计模式的重要性

著名的EJB领域顶尖的专家 Richard Monson-Haefel在其个人网站:www.EJBNow.com 中 极力推荐的GoF的《设计模式》,原文如下:

Design Patterns
Most developers claim to experience an epiphany reading this book. If you've never read the Design Patterns book then you have suffered a very serious gap in your programming education that should be remedied immediately.

翻译: 很多程序员在读完这本书,宣布自己相当于经历了一次"主显节"(纪念那稣降生和受洗的双重节日),如果你从来没有读过这本书,你会在你的程序教育生涯里存 在一个严重裂沟,所以你应该立即挽救弥补!

可以这么说:GoF设计模式是程序员真正 掌握面向对象核心思想的必修课。虽然你可能已经通过了SUN的很多令人炫目的技术认证,但是如果你没有学习掌握GoF设计模式,只能说明你还是一个技工。

在浏览《Thingking in Java》(第一版)时,你是不是觉得好象这还是一本Java基础语言书籍?但又不纯粹是,因为这本书的作者将面向对象的思想巧妙的融合在Java的具体 技术上,潜移默化的让你感觉到了一种新的语言和新的思想方式的诞生。

但是读完这本书,你对书中这些蕴含的思想也许需要一种更明晰更系统更透彻的了解和 掌握,那么你就需要研读GoF的《设计模式》了。

Thingking in Java》(第一版中文)是这样描述设计模式的:他在由Gamma, Helm和Johnson Vlissides简称Gang of Four(四人帮),缩写GoF编著的《Design Patterns》一书中被定义成一个“里程碑”。事实上,那本书现在已成为几乎所有OOP(面向对象程序设计)程序员都必备的参考书。(在国外是如 此)。

GoF的《设计模式》是所有面向对象语言(C++ Java C#)的基础,只不过不同的语言将之实现得更方便地使用。

GOF的设计模式是一座"桥"
就Java语言体系来说,GOF的设计模式是Java基础知识 和J2EE框架知识之间一座隐性的"桥"。

Java的人越来越多,但是一直徘徊在 语言层次的程序员不在少数,真正掌握Java中接口或抽象类的应用不是很多,大家经常以那些技术只适合大型项目为由,避开或忽略它们,实际中,Java的 接口或抽象类是真正体现Java思想的核心所在,这些你都将在GoF的设计模式里领略到它们变幻无穷的魔力。

GoF的设计模式表面上好象也是一种具体的"技术", 而且新的设计模式不断在出现,设计模式自有其自己的发展轨道,而这些好象和J2EE .Net等技术也无关!

实际上,GoF的设计模式并不是一种具 体"技术",它讲述的是思想,它不仅仅展示了接口或抽象类在实际案例中的灵活应用和智慧,让你能够真正掌握接口或抽象类的应用,从而在原来的Java语言 基础上跃进一步,更重要的是,GoF的设计模式反复向你强调一个宗旨:要让你的程序尽可能的可重用。

这其实在向一个极限挑战:软件需求变幻无穷,计划没有变化快,但是我们还是要寻找出不变的东 西,并将它和变化的东西分离开来,这需要非常的智慧和经验。

GoF的设计模式是在这方面开始探索的 一块里程碑。

J2EE等属于一种框架软件,什么是框架软件?它不同 于我们以前接触的Java API等,那些属于Toolkist(工具箱),它不再被动的被使用,被调用,而是深刻的介入到一个领域中去,J2EE等框架软件设计的目的是将一个领域 中不变的东西先定义好,比如整体结构和一些主要职责(如数据库操作事务跟踪 安全等),剩余的就是变化的东西,针对这个领域中具体应用产生的具体不同的变化需求,而这些变化东西就是J2EE程序员所要做的。

由此可见,设计模式和J2EE在思想和动 机上是一脉相承,只不过

1.设计模式更抽象,J2EE是具体的产品代码,我们 可以接触到,而设计模式在对每个应用时才会产生具体代码。

2.设计模式是比J2EE等框架软件更小的体系结 构,J2EE中许多具体程序都是应用设计模式来完成的,当你深入到J2EE的内部代码研究时,这点尤其明显,因此,如果你不具备设计模式的基础知识 (GoF的设计模式),你很难快速的理解J2EE。不能理解J2EE,如何能灵活应用?

3.J2EE只是适合企业计算应用的框架软件,但是 GoF的设计模式几乎可以用于任何应用!因此GoF的设计模式应该是J2EE的重要理论基础之一。

所以说,GoF的设计模式是Java基础 知识和J2EE框架知识之间一座隐性的"桥"。为什么说隐性的?

GOF的设计模式是一座隐性的"桥"
因为很多人没有注意到这点,学完Java基础语言就直接去学 J2EE,有的甚至鸭子赶架,直接使用起Weblogic等具体J2EE软件,一段时间下来,发现不过如此,挺简单好用,但是你真正理解J2EE了吗?你 在具体案例中的应用是否也是在延伸J2EE的思想?

如果你不能很好的延伸J2EE的思想,那 你岂非是大炮轰蚊子,认识到J2EE不是适合所有场合的人至少是明智的,但我们更需要将J2EE用对地方,那么只有理解J2EE此类框架软件的精髓,那么 你才能真正灵活应用Java解决你的问题,甚至构架出你自己企业的框架来。(我们不能总是使用别人设定好的框架,为什么不能有我们自己的框架?)

因此,首先你必须掌握GoF的设计模式。 虽然它是隐性,但不是可以越过的。

 

关于本站“设计模式”

Java提供了丰富的API,同时又有强大的数据库系 统作底层支持,那么我们的编程似乎变成了类似积木的简单"拼凑"和调用,甚至有人提倡"蓝领程序员",这些都是对现代编程技术的不了解所至.

在真正可复用的面向对象编程中,GoF的 《设计模式》为我们提供了一套可复用的面向对象技术,再配合Refactoring(重构方法),所以很少存在简单重复的工作,加上Java代码的精炼性 和面向对象纯洁性(设计模式是java的灵魂),编程工作将变成一个让你时刻体验创造快感的激动人心的过程.

为能和大家能共同探讨"设计模式",我将 自己在学习中的心得写下来,只是想帮助更多人更容易理解GoF的《设计模式》。由于原著都是以C++为例, 以Java为例的设计模式基本又都以图形应用为例,而我们更关心Java在中间件等服务器方面的应用,因此,本站所有实例都是非图形应用,并且顺带剖析 Jive论坛系统.同时为降低理解难度,尽量避免使用UML图.

如果你有一定的面向对象编程经验,你会发 现其中某些设计模式你已经无意识的使用过了;如果你是一个新手,那么从开始就培养自己良好的编程习惯(让你的的程序使用通用的模式,便于他人理解;让你自 己减少重复性的编程工作),这无疑是成为一个优秀程序员的必备条件.

整个设计模式贯穿一个原理:面对接口编 程,而不是面对实现.目标原则是:降低耦合,增强灵活性.

 


建筑和软件中模式之异同

板桥里人 http://www.jdon.com 2002年6月26日

CSDN的透明特别推崇《 建筑的永恒之道 》,认为从中探寻到软 件的永恒之道,并就"设计模式"写了专门文章《 探寻软件的永恒之道 》,其中很多观点我看了很受启发,以前我也将"设计模式" 看成一个简单的解决方案,没有从一种高度来看待"设计模式"在软件中地位,下面是我自己的一些想法:

建筑和软件某些地方是可以来比喻的

特别是中国传统建筑,那是很讲模式的,这 些都是传统文化使然,比如京剧 一招一式都有套路;中国画,也有套路,树应该怎么画法?有几种画法?艺术大家通常是创造出自己的套路,比如明末清初,水墨画法开始成熟,这时画树就不用勾 勒这个模式了,而是一笔下去,浓淡几个叶子,待毛笔的水墨要干枯时,画一下树干,这样,一个活生写意的树就画出来.

我上面这些描述其实都是一种模式,创建模 式的人是大师,但是拘泥于模式的人永远是工匠.

再回到传统建筑中,中国的传统建筑是过分 注重模式了,所以建筑风格发展不大,基本分南北两派,大家有个感觉,旅游时,到南方,你发现古代名居建筑都差不多;北方由于受满人等少数民族的影响,在建 筑色彩上有些与南方迥异,但是很多细节地方都差不多.这些都是模式的体现.

由于建筑受材料和功用以及费用的影响,所 用模式种类不多,这点是和软件很大的不同.

正因为这点不同,导致建筑的管理模式和软 件的管理模式就有很多不同, 有些人认识不到这点,就产生了可以大量使用"软件蓝领"的想法,因为他羡慕建筑中"民工"的低成本.

要知道软件还有一个与建筑截然相反的责任和用途,那就是:现代社会中,计划感不上变化,竞争激烈,所有一切变幻莫测,要应付所有这些变化,首推信息技术中的软件,只有软件能 够帮助人类去应付各种变化.而这点正好与建筑想反,建筑是不能帮助人类去应付变化的,(它自己反而要求稳固,老老实实帮助人遮风避雨,总不能叫人类在露天 或树叶下打开电脑编软件吧).

软件要帮助人类去应付变化,这是软件的首 要责任,所以,软件中模式产生的目的就和建筑不一样了,建筑中的模式产生可以因为很多原因:建筑大师的创意;材料的革新等;建筑中这些模式一旦产生,容易 发生另外一个缺点,就是有时会阻碍建筑本身的发展,因为很多人会不思创造,反复使用老的模式进行设计,阻碍建筑的发展.

但是在软件中,这点正好相反,软件模式的 产生是因为变化的东西太多,为减轻人类的负担,将一些不变的东西先用模式固化,这样让人类可以更加集中精力对付变化的东西,所以在软件中大量反复使用模式 (我个人认为这样的软件就叫框架软件了,比如J2EE),不但没阻碍软件的发展,反而是推动了软件的发展.因为其他使用这套软件的人就可以将更多精力集中 在对付那些无法用模式的应用上来.

可以关于建筑和软件中的模式作用可以总结如下:

在软件中,模式是帮助人类向"变化"战 斗,但是在软件中还需要和'变化'直接面对面战斗的武器:人的思维,特别是创造分析思维等等,这些是软件真正的灵魂,这种思维可以说只要有实践需求(如有 新项目)就要求发生,发生频度高,人类的创造或分析思维决定了软件的质量和特点。

而在建筑中,模式可以构成建筑全部知识, 当有新的需求(如有新项目),一般使用旧的模式都可以完成,因此对人类的创造以及分析思维不是每个项目都必须的,也不是非常重要的,对创造性的思维的需求 只是属于锦上添花(除非人类以后离开地球居住了)。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值