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

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

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

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

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

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

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

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

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

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

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

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

设计模式总结——程序员的武功秘籍(上)

万年前,人类用肢体力量来扩展地盘、获取食物,那时候比的是发育。后来人们学会了使用工具,开始利用石头、棍棒。再后来,人类有了文明,刀枪棍棒使得身体素质不是唯一决定强弱的唯一条件。再后来,一些聪明人根据人...
  • u010930340
  • u010930340
  • 2014-07-31 14:09:07
  • 1077

《软考设计模式之武功秘籍》

小编经历了第二次软考,在承接第一次软考的基础上,此次收获可谓是累累硕果,当然这里有大神相助,敬请期待大神给小编修炼秘诀。...
  • yxf15732625262
  • yxf15732625262
  • 2017-05-28 23:40:36
  • 485

第五届蓝桥杯省赛JavaB组第一题武功秘籍

标题:武功秘籍    小明到X山洞探险,捡到一本有破损的武功秘籍(2000多页!当然是伪造的)。他注意到:书的第10页和第11页在同一张纸上,但第11页和第12页不在同一张纸上。    小明只想练习该...
  • lalalalalala_
  • lalalalalala_
  • 2017-03-20 19:03:54
  • 356

YTU 2508: 武功秘籍

2508: 武功秘籍 时间限制: 1 Sec  内存限制: 128 MB 提交: 1384  解决: 438 题目描述 小明到X山洞探险,捡到一本有破损的武功秘籍(2000多页...
  • qq_28954601
  • qq_28954601
  • 2016-02-09 11:38:24
  • 478

第五届蓝桥杯软件类省赛真题-C-C-1_武功秘籍

/*【题目】 标题:武功秘籍     小明到X山洞探险,捡到一本有破损的武功秘籍(2000多页!当然是伪造的)。他注意到: 书的第10页和第11页在同一张纸上,但第11页和第12页不在同一张纸上。...
  • Chen_Tongsheng
  • Chen_Tongsheng
  • 2016-11-19 21:27:28
  • 768

蓝桥杯Problem J: 武功秘籍

问题及代码: Problem J: 武功秘籍 Time Limit: 1 Sec  Memory Limit: 128 MB Submit: 2394  Solved: 902 [Submit][...
  • JYL1159131237
  • JYL1159131237
  • 2017-04-04 20:29:44
  • 977

2016蓝桥杯假期任务之《武功秘籍》

标题:武功秘籍     小明到X山洞探险,捡到一本有破损的武功秘籍(2000多页!当然是伪造的)。他注意到:书的第10页和第11页在同一张纸上,但第11页和第12页不在同一张纸上。     小明只...
  • Liuchang54
  • Liuchang54
  • 2016-01-23 11:46:30
  • 1897

蓝桥杯JAVA语言B组_武功秘籍

标题:武功秘籍 小明到X山洞探险,捡到一本有破损的武功秘籍(2000多页!当然是伪造的)。他注意到:书的第10页和第11页在同一张纸上,但第11页和第12页不在同一张纸上。 小明只想练习该...
  • ojhawu
  • ojhawu
  • 2017-04-11 19:40:19
  • 248

第16周-武林秘籍

问题及代码: /* *Copyright (c)2014,烟台大学计算机与控制工程学院 *All rights reserved. *文件名称:blackbeans.cpp *作 者:单...
  • MIKASA3
  • MIKASA3
  • 2014-12-12 12:11:41
  • 878

OJ刷题之武功秘籍

问题及代码: /* * Copyright (c) 2014, 烟台大学计算机与控制工程学院 * All rights reserved. * 文件名称:test.cpp *...
  • haojy826
  • haojy826
  • 2014-12-29 14:43:10
  • 1032
收藏助手
不良信息举报
您举报文章:设计模式与武功秘籍的异曲同工
举报原因:
原因补充:

(最多只允许输入30个字)