无论,您是学什么编程语言,都离不开设计模式。
网上关于设计模式的评价,也是褒贬不一,各家观点不同。
但无论大家怎么争论,都改变不了面试官会考查这方面知识的事实。
既然每次面试都逃不开这个话题,那咱,就来扯一扯“设计模式”。
在小编看来,学习功夫和学习设计模式很像。
咱就从学功夫的角度来聊聊学习设计模式。
对于不会功夫的人来说,想要打倒对方,可以有很多种方式。
可以抡起拳头砸。
用脚踹。
用头撞。
甚至用牙咬。
这时候,有人会说,看,学不学功夫都无所谓,通过上面这些方式,就可以打倒对方。
是的,如果你觉得通过上面的方式可以很容易击倒对方,那学不学功夫确实无所谓了。
毕竟杀猪杀屁股,各有各的杀法。
但如果你想让自己击倒对方更轻松,更快,该怎么办呢?
方法一:不停地和别人打架,从无数次的教训中找到经验,自我总结,然后改进自己的战斗方式,从而提高战斗力。
方法二:拜访圈子里的大牛,学习别人的经验和技巧,提高战斗力。
毫无疑问,第二种显然要比第一种达成目的的速度快得多,而且吃的苦也要少一点,毕竟第一种无论从学习的时间成本,还是安全成本上来讲,都不划算!!
正是因为每个人的经验不一样,所以,每个人对功夫的理解和评价也不一样。
如果是打架经验丰富的人,看着师傅打出来的一招一式,会很有感悟,忍不住感叹“太实用了,之前我就是被这样挨打的”,因为这些招式和他平时打人的手法原理相通,一通则百通,所以学习的时候,很容易掌握,学完之后,也十分受益。
如果是没有打架经验的小白来学习,就很懵逼了,马步为啥要这样站,发力为啥要这样发,挡为什么要这样挡?我这样不行吗?我这样不是更省事吗?为啥要绕那么多的弯?
他不知道每个招式背后的原理,既没被别人打过,也没打过别人,光学会了招式,就和练习体操一样,到了实战的时候,一套招式展示下来,不仅打不倒对方,自己还累的半死,于是吐槽功夫就是花拳绣腿,毫无意义。
但学功夫,招式只是表面,思想才是其内核,你得知道为啥要有这样的动作?
只有了解其运用场景和原理,才能真正的掌握这门技艺。
下面我给您举个例子:
很多人不明白学功夫为啥要扎马步,还要腰马合一,这要是被人一脚踢裆,那不是嗝屁了吗?
其实功夫在古时候,是被用在战场上的,士兵杀死对方最快的方式,就是骑马快速将对方斩杀。
所以,士兵学习最多的功夫就是如何边骑马边用兵器击杀敌人的方法。
战马快速奔跑过程中,既要保持身体平衡,还要攻击对方,所以双腿要稳稳地夹住宽厚的马背,双脚还要牢牢踩住马蹬,这就叫马步,同时腰上发力,才能挥舞手中的长枪刺向敌人。
知道了功夫来自于战场,来自于马上作战,自然就明白了为什么古人学功夫要扎马步和腰马合一了。
再比如一些古拳法,取法于枪术,比如形意拳,讲究脱枪为拳,拳头发力时,如同将自己手中的长枪刺出去,所以拳法和枪法很多原理就很相似,如果单从拳法的角度去理解,那很多招式就理解不了。
再比如八卦掌,取法于刀法,单掌为单刀,双掌为双刀,剑法在于刺,而刀法在于劈,砍,削,了解了掌法由刀法演化而来,八卦掌中很多看似奇怪的招式也就不奇怪了。
当然,每种功夫的招式千变万化,真正实战的时候,一定是随机应变,能从学过的招式中找到合适的反击技巧,那直接使用即可,但如果没有明确的反击招式,那就需要对当时的环境和地方的特点进行分析,见招拆招,从而战胜对方。
啰嗦了这么久,其实设计模式就和功夫一样,是行业大牛们总结而来的经验。
我们在学习设计模式的时候,不需要生搬硬套,要理解其设计思想,这种写法到底是为了解决什么问题?又是运用在什么场景下?
这也是为什么很多经验丰富的老程序员看到设计模式的写法后,感叹,这不就是我们现在的写法吗?
是的,有些写法其实你自己一直在用,只是你不知道这种写法叫什么名字,其实很早别人就把它整理出来,还取了个好听的名字而已。
不经想起小时候看过的一部电视剧《侠客岛》,里面有一个场景,狗杂种与贝海石对决时,贝海石被打的口吐鲜血,惊讶地问到“你这是什么功夫?”,狗杂种说道:“我不知道,我只知道随心所欲”!
无论是功夫也好,设计模式也罢,也仅仅是为我们解决问题提供的一种思路,条条大路通罗马,至于怎么运用,要不要用,取决于用的人。如果使用的人觉得此处完全可以简简单单,那就没必要非搞得那么复杂。
好啦,说了这么多,其实就是为了引出接下来的“设计模式”的章节,今天就说这么多,敬请期待吧!!
为什么大部分程序员写不出优美的代码
扯一扯10年后程序员的出路