设计模式与武功秘籍的异曲同工

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

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

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

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

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

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

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

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

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

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

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

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值