原创 设计模式与武功秘籍的异曲同工收藏

 | 旧一篇: 存储过程是多用还是少用?

            只要有一定开发经验的人都知道,做过一段时间开发后,如果想把软件做得更好一点,让自己的开发能力更强一点。最常用的方法就是学习、使用设计模式。

        然而学习、使用设计模式对于开发有什么意义,或者说有什么帮助了?设计模式对于一个做开发的人来说,就好比武功秘籍与一个练武的人一样。本人曾经也是个武侠迷,金庸与古龙写的那些武侠小说基本上全看了,说来惭愧,大学四年几乎就这点收获了。

           在武侠的小说中,武功秘籍很多,尤其是金庸的小说,什么降龙十八掌、九阴真经、乾坤大挪移等等,名目繁多,数不胜数。我们知道,设计模式同样也很多,工厂模式、策略模式、观察者模式等等。这两个东西似乎风马牛不相及,但是只要我们仔细分析,就不难发现它们之间却有着异曲同工之妙。我们知道做开发的目的很简单,就是完成项目,让客户满意;练武的目的也很简单,就是打败敌人。当然如果只为了强身健体,就不需要什么秘籍,回家去跑跑步,或者做两俯卧撑,基本上也就可以了。

          看过武侠小说的人都知道,小说中描述一个练武之人,一旦掌握了某个秘籍,再和人打架,那可真是出手不凡,“射雕”中梅超风就是,仅仅偷学了几招九阴白骨爪,她还没有完全掌握,因为她不同于全真教的那帮牛鼻子,会修炼内功,也不懂什么“五心朝上”。但她出入江湖,几乎是为所欲为。在完颜府上把沙通天那帮人打得可谓是落花流水。同样,我们做开发的时候,如果用某个合适的设计模式,在满足客户的某些特殊的需求的时候,就会显得事半功倍。就比如客户有时候会要求,我们所做的项目要求在前期使用sqlserver数据库,但是在将来的某个时刻能升级到oracle。这个时候,恐怕大家都知道,采用工厂模式就行,在配置文件中写入不同参数,就能使用不同的数据库,无须修改任何代码。

        当然一个工厂模式不可能解决软件中的所有问题。那意思是不是掌握了所有设计模式就可以解决所有问题了?不是!正如武功秘籍一样,即使你会了秘籍,如果没有相应的武学根基,是不可能打败所有的敌人。梅超风偷虽然偷得秘籍,但是在江湖上也是处处受人欺侮。不仅有很多人她打不过,而且她因为不会牛鼻子的内功心法,所以特容易走火入魔。设计模式也是,如果没有全面掌握好,仅仅是一知半解,就很容易误学误用,事倍功半。本人就有过这样的经历,把单例模式用在数据库连接类上,自己觉得自己还蛮聪明的,结果不是那么回事。具体为什么单例模式不用在数据库连接类,有兴趣可以自己研究,这里就不多说了。

       学习武功秘籍有时候需要付出艰难的代价,比如射雕中欧阳疯为了九阴真经,处心积虑,忍辱负重好多年,最终得到的还是个赝品;又如“笑敖江湖”中的岳不群,为了一本避邪剑谱,做个十足的伪君子,甚至自宫都在所不惜。当然学好、用好设计模式不至于这么艰难,但是也需要我们付出大量的时间与精力。首先得有一定编程基础,编程语言的一些基础知识还是应该掌握的。比如什么是回归法、什么是抽象类、什么是继承等等。正如练武之前必须先练练基本功一样,基本功不扎实,怎么练恐怕也难成大器。“鹿鼎记”中的韦小宝就是典型一例,秘籍是学了不少,会用的却没有,打起架来除逃跑就不会别的了。当然,在这里不是批判那位“韦爵爷”,因为人家虽然不会武功,但照样混得好,属于绝对的成功人士,不需要批判。   

      学习武功秘籍说难其实也不难,只要有耐心,聪明的能学会,笨的也能学会。聪明的黄蓉能很快学会打狗棒法,愚笨的郭靖也能练成周伯通所发明的"双手互搏术"。对于有一定编程基础的人,掌握各个设计模式不是什么难事。关于设计模式的书也是汗牛充栋。去书店或在网上随便找一本,多啃两天估计也就差不多了。其实学什么都一样,我们不管是学习编程,还是学习设计模式,只要象郭靖学习降龙十八掌那样,一招简单的“亢龙有悔”能练上三天,如此努力,哪怕是愚笨,也没有什么学不好的。正如毛主席教导我们的,世上无难事,只要肯攀登。当然在我们努力学习的时候,也需要讲究技巧与方法。学习每一个设计模式的时候,最好找实例做参照,那样能更快的明白。比如说适配器模式,我们笔记本所用的电源就是一点典型的适配器实例,一个转换电源的这么一个东西就是一个适配器。在开发过程中,适配器模式就是对一个类进行适当的封装,用以实现原来没有的功能,或者扩充原来的功能。   

      有了武功秘籍也不代表武功高强,“天龙八步”中王语嫣懂得许多的秘籍,几乎倒背如流,但她手无缚鸡之力。但凡高手,不仅作战经验丰富,而且还十分懂得融会贯通,灵活运用。看过古龙写的“多情剑客无情剑”就知道,武功的最高境界能虽随心所欲、见招拆招,最后是无招胜有招。只有等对方出招,才能找到其破绽所在。我们知道如果只能依靠一些固定的招式取胜的话,那只能算是停留低级阶段。设计模式也一样,即使把所有的设计模式倒背如流,如果不能融会贯通,灵活运用,恐怕也是设计不出好软件来。只有根据具体需求,设计具体的模式来解决实际问题。有了具体问题,我们才有研究问题的方向。还有一点,设计模式切忌生搬硬套,虽然现有设计模式很多,经典就达23种之多。但是在遇到实际问题的时候,我们往往很难找到解决问题的现有模式。正如太极的最高境界,只有忘了现成的招式,才能行云流水,潇洒飘逸。

      至于怎么设计模式来解决实际问题,说融会贯通、灵活运用、具体情况具体分析,都恐怕是含糊的。这也不是一个明确的答案,设计模式的最高境界,跟武功是一样的,是没有固定没有模式可言的,遇到具体的问题找到具体解决方法即可。但有一点是我们应该明白的,在我们做设计软件时,软件设计的一些基本原则我们必须遵守,比如迪米特法则、里氏代换、依赖倒转等等。本人认为这些原则最终目的无非是一个,高内聚,低偶合。

     最后,扯远一点,很多技术高手很容易被人称为大侠,其实技术上大侠也和武功上的大侠是一回事,武功上能称得上大侠人,不仅是武艺高强,还必须品格高尚。在技术上同样也是这个道理,只有德才兼备才能算是真正的大侠。正所谓为国为民者侠之大者。

    话又说回来,武功秘籍只是小说里东西,属于艺术范畴。在现实生活中,至少是不完全存在的,在这里我们把两者结合起来,是为了让大家更好的学习、使用设计模式,希望本文能帮助对设计模式有兴趣的人能走得更快一点,走得更远一点。

发表于 @ 2008年07月09日 08:28:00|评论(loading...)|编辑|收藏

 | 旧一篇: 存储过程是多用还是少用?

评论

#memoCKH 发表于2008-07-09 10:15:05  IP: 116.1.71.*
说得好的,我觉得,就是这样的。
#xinghongyang 发表于2008-07-09 12:59:25  IP: 116.52.31.*
经典啊!
#qzgqzg198077 发表于2008-07-09 13:34:37  IP: 221.215.169.*
设计模式的作用需要在实践中慢慢体味,当你觉得某种表现形式无法满足你的需求,也就是你可以开始使用uml的时候了
#qzgqzg198077 发表于2008-07-09 13:36:11  IP: 221.215.169.*
我得主main site http://www.createsoft.net
#zhuwanglove 发表于2008-07-09 14:06:50  IP: 219.136.190.*
#wodqqdiul 发表于2008-07-09 14:50:02  IP: 221.218.3.*
#jackhatedance 发表于2008-07-09 16:58:31  IP: 61.241.79.*
说得好。
特别是当你把设配器模式联想笔记本的适配器的说法很好理解。但大部分情况下,我对武功秘籍比设计模式更加不了解。
#linhaiv 发表于2008-07-09 17:22:55  IP: 222.92.22.*
GOOD!
#kongxiangli 发表于2008-07-09 17:23:43  IP: 218.249.16.*
没有事情可做的时候,可以看看小说
#wangzepen 发表于2008-07-09 19:32:14  IP: 121.11.12.*
在线技术视频

http://www.ZzGps.Cn <——关于各技术文章

上千视频下载
#jiazhen 发表于2008-07-09 22:57:32  IP: 58.60.48.*
经典
#nanqing 发表于2008-07-10 08:56:40  IP: 58.211.43.*
設計模式這東東,正如lz所說,要勤加實踐,才能運用自如,鼎,剛入門
#nginxlee 发表于2008-07-10 10:26:56  IP: 219.142.131.*
说了跟没说一样,感觉就是废话!
#magicbreaker 发表于2008-07-10 11:22:04  IP: 124.193.126.*
写的比较靠谱,阅。
#chenshaolinqing 发表于2008-07-10 11:24:14  IP: 210.83.228.*
说的不错!
#zjclugger 发表于2008-07-10 15:06:20  IP: 61.145.147.*
国为民者侠之大者……
#zhaoqinfen 发表于2008-07-11 12:55:54  IP: 124.129.137.*
写的不错。
#huanxu20011572 发表于2008-07-11 15:49:25  IP: 202.111.188.*
好t
#wangzepen 发表于2008-07-13 08:57:07  IP: 116.26.175.*



http://www.ZzGps.Cn
提倡技术资料分享的站点,技术文章,技术视频,对技术有兴趣的看看

#zhuimeng0608 发表于2008-07-13 12:45:18  IP: 219.146.227.*
谢谢楼主,加深了了解
#cafemore 发表于2008-07-15 11:04:17  IP: 58.247.7.*
像那个谁说过的一样。 开始照着做,以后胡来就可以了。我学习程序设计就是为了追求自由。有自己的风格,自己的想法。设计。
#youjianbo_han_87 发表于2008-07-15 15:04:38  IP: 202.152.186.*
不错
#jkler_doyourself 发表于2008-07-18 20:29:53  IP: 122.96.60.*
我自己也写了一篇博客,讨论设计模式其实就是努力寻找自己所解决的问题域,变化的部分是什么,固定的部分是什么!然后,用写死的代码逻辑来简历固定部分,用变量来替换可变化部分,就是精良的“设计”模式!
 
GOF 23种设计模式中所说的模式,很多时候来说就是问题域的固定部分,遇到带有这样明显特色的场景才能应用合适的设计模式!
发表评论  


当前用户设置只有注册用户才能发表评论。如果你没有登录,请点击登录
Csdn Blog version 3.1a
Copyright © kongxiangli