将程序中的变与不变分开,你真的懂我说的是什么?

导语:虽然我是一个无情的打工仔,但是我有一颗向上的心。我准备新开一个系列和大家好好聊聊自学的时候看不上,现在奉为宗旨(夸张)的设计模式。

我自学编程的时候,真的没有去仔细了解过设计模式这种东西,因为它总是被我贴上了玄幻的标签。

没办法,线性思维的我总是觉得敲代码就是为了解决问题,解决问题又不能弯道超车,设计模式这种他人眼里的思路简单稍微理解一下就行了,当真岂不是意味着被同化了嘛。

当时的我,对设计模式的了解都是为了应付未来的面试,但是入职以后血淋淋的现实告诉我,熟练掌握设计模式到底有多重要。

言归正传,我们既然要聊设计模式,就得知道设计模式的前世今生吧,哪怕你不感兴趣它的历史,你也总得知道它是什么吧。

所以看到这的小伙伴别急,我现在就要开始正式介绍设计模式了。

什么是设计模式

百度出来的设计模式(Design Pattern)指的是一套被反复使用、多数人知晓的、经过分类的、代码设计经验的总结。设计模式代表了最佳的实践,是软件开发人员在软件开发过程中面临的一般问题的解决方案。

其目的有四:

  • 提升代码的重用性

  • 提升代码的可阅性

  • 提升代码的可靠性

  • 提升代码的可拓展性

先前的对设计模式的理解是不是太枯燥,来看看我对设计模式的理解。

设计模式就是一本三十六计,它不是毫无根据、虚无缥缈的坊间传说,而是你的无数码农前辈以自己和祖传烂代码之间丰富的斗争经验而总结出的兵书。

仔细想想,设计模式的背后是码农们在实际项目中无数次掉坑、爬坑、填坑的过程,不敢说是血与汗,最少也是吃了各种教训的前辈们的一个个无辜的毛囊。

热情好心的前辈们为了不让我们后辈重蹈覆辙,忍痛把过去的实际经验抽象成一个个设计模式。可以说设计模式的出现,才让敲代码变得有条理。

不用去怀疑,熟练掌握设计模式的你,不敢说一步登天成为能造轮子的大牛,最少也能拿捏项目开发中的简单脉络,知道怎么去下手解决问题。

我可没有夸大其词,如果你还是用之前漫无目的的发散思维去设计自己的代码,或者根本没有设计这个环节而是直接动手的尝试,当你代码写的越来越多的时候反而是你越来越痛苦的时候。

上面这位知乎老哥的回答我就很喜欢,像我之前一样觉得设计模式没用,现在看来其本质上就是因为上手的项目太少,自己动手敲过的代码太少。

我自学的时候想着设计模式不过是在笔试的时候会考到,也就是介绍一下某个设计模式的优缺点,最多是用某一语言以不同的方法实现一下,或者对比几个设计模式之间的区别。

真正面试的时候关于设计模式的比重还没有笔试的时候多,加上学这种抽象的东西很容易枯燥乏味,我内心就很抗拒,刻意淡化了这些基础知识。当时的我真的是 too young too simple。

现在看来,设计模式本身没有什么故弄玄虚的地方,也没什么特殊的身份,它不过是将本该由你思考需求,不断踩坑去寻求解决方案的这个过程,前人早已帮你系统化总结好了。

对于现成的设计思路,你要做的不过是为图纸添砖加瓦,至于选什么砖,怎么砌砖都得看你的手艺了。

但毫无疑问,设计模式于己于他人于项目本身都是多赢的。

我们可能达不到大神的高度,一辈子也创新不出神奇的算法,但我们只要熟练掌握了设计模式,并且能写出高质量的代码,我们就足以胜任各种场景了。

如果你要现在问我对设计模式的态度?

那就是一定要学,但不要学的太死板,它不是定理也不是原则,它是一种解决问题的潜在思路,具体怎么用还是要见招拆招。

当你代码量小的时候可能总结不出什么,甚至代码量大了也可能总结不出什么,但等你熟悉了项目的开发、迭代、重构、重写、维护以后,你一定会认可设计模式的存在。

当初我在学习设计模式的时候见过很多人说,设计模式的本质就是解耦,而其他的框架都是万变不离其宗,我越琢磨越觉得是这么回事。

将设计模式变成你面对需求时思考的本能习惯,我大概后面很多年都会为了这个目标而努力吧。

设计模式的过去

总觉得刚刚跑题很严重,不过都是我对设计模式的思考,仅代表个人想法。现在再次回归正题,来聊聊设计模式的过去。

设计模式的首次提出是1994年由 GOF(俗称四人帮)合著的一本名为《设计模式-可复用的面向对象软件元素》的书中所介绍的。

这本书中的每一章最后都清清楚楚的记述了设计模式的由来,可以说每一个设计模式都是对当时已有的实用软件的总结。

不过那本书更多是针对当时关于 C++ 这个语言本身存在的问题,何况至今快 30 年的历史了,内容过时也是无可避免的,喜欢“考古”的小伙伴还是可以去瞅瞅的

结论

我们要理性看待设计模式,不要怀疑前人的智慧,但也别硬搬硬套,无脑吹捧。

面对不同的复杂需求,你要做到是多思考,争取能从已有的设计模式中找到思路,然后再去尝试实现。

最后提一嘴我说的这个系列我是准备用 Python 实现,争取用大家都能看懂的大白话把那几种设计模式讲清楚,这也是我自己的总结吧。至于介绍设计模式的顺序我就随意了啊~

敬请期待:)

(0)

相关推荐

  • 我们一直谈论“写代码”,但你会“读代码”吗?

    编程,又被称作"写代码".这个说法有可能会带来一点点误解,让人觉得如何"写"是学习编程要解决的主要问题.但事实并非如此.尽管最终代码要在键盘上敲出来,但这个过程 ...

  • android培训课程!20天内看完这套GitHub标星18k 的Android资料,面试必问

    想要成为一名优秀的Android开发,你需要一份完备的知识体系,在这里,让我们一起成长为自己所想的那样~. 25%的面试官会在头5分钟内决定面试的结果 60%的面试官会在头15分钟内决定面试的结果 一 ...

  • 关于商务谈判,你不可不知的5个坑!

    个人发展学会 陪你成长  持续精进 一般的商务合同中都会有什么坑呢?我给大家梳理了一下,大概有这么五点. 壹 首先第一点就是一定要注意合同的开头的原则性声明,类似于英文合同里的(whereas),我们 ...

  • 求你了,别背代码!

    我学编程的时候记不住代码,老忘怎么办? 比如这位小伙伴,学编程一个月了,问我咋背代码: 头像不错 其实,我自己的记性是非常非常差的,所以我才在选专业的时候弃法从码. 我在最开始学习 C 语言编程的时候 ...

  • 嵌入式开发中需要用到设计模式吗?

    工作有些年了,每每看到一些朋友会问,设计模式需要学吗?好像做嵌入式的从没遇到过需要用设计模式的,所以一直没系统学习,但是我也知道这个很重要,久而久之,到头来还是没学. 这里我说一下自己的看法和思考,来 ...

  • 中国宝妈迷恋进口货,是真的懂纸尿裤吗?

    你知道中国宝妈最爱的产品有哪些吗?提起这个,纸尿裤必定名列前茅.然而,并不是所有的纸尿裤都是宠儿,比起"made in china ",中国宝妈往往更愿意宠爱进口纸尿裤.为什么很多 ...

  • 玩石头是一种生活的态度,是让自己在幸福中慢慢变老

    关于玩石头玩什么的话题,相信玩石头的人都有话说,对于玩石头的好处更是可以罗列出十条八条的.有人说玩石头玩的是文化,有人说玩石头玩的是心态,有人说玩石头玩的是资金,有人说玩石头玩的是意境,有人说玩石头玩 ...

  • 细说六爻纳甲法中卦变与爻变的断卦解析,入门必读

    由老阴变为少阳叫做变,由老阳变为少阴叫做化.变犹如事物由消损而转为增长,由后退转为进取,由深夜转向白昼:化犹如事物由成熟转向凋败,由上升转为下降,由默契转为隔阂. 在<增删卜易>里:交为老 ...

  • 如何在vb程序中实现对access数据库的msysobjects表的读取操作?

    各种基于SEIR模型的改进算法代码.Python代码,还包含Si,sir,sis的代码,是做数学建模比赛整理的资料,具全,带论文.研究COVID-19的传播过程和受感染人数的变化规律,是探索如何制止C ...

  • 如何将Excel表格中的日期和时间分开成两列?

    Excel的制作通常都有很多小技巧,比如一个单元格中输入日期和时间,运用一些技巧就能直接将其分成日期和时间单独的两列,而无需手动修改,无疑可以节约大量的人工.下面就具体说说将表格中的日期和时间分开的三 ...

  • 【巧联求对414】出句:老叟病中身变瘦(辽宁 乔树才)

    [巧联求对]第414期 出句:老叟病中身变瘦(辽宁 乔树才) 机巧:叟+病中=瘦,谜语联 为方便收集整理对句,特做如下要求: 1.对句请在本公众号文末点击 写留言 跟帖即可: 2.因公众号限制跟帖留言 ...

  • 国际仲裁文件“披露程序”(Document Production)程序中的律师实务丨德恒研究

    "文件披露"(Document Production)是国际仲裁中的一个非常重要的程序环节,这关系到仲裁庭对于案件事实的认定,进而会影响到最终的裁决结果.目前,国际上通行的仲裁规则 ...

  • PLC程序中急停为什么要写成常开?

    在PLC编程中,一般把停止按钮物理接点接成常闭,程序中写成常开,这样的停止按钮在这套设备中只起到信号作用. 为什么PLC编程中急停要和普通急停按钮相反呢?其实写成常开的不仅仅是急停,还有热继.温控等等 ...

  • 如何将单元格中的数字和文本分开?

    问:一列中,有比如 123.123-1.1234-1.123三.123-1三.1234-1四的数据,要求把数字和文字分解开分列,如何分??? 答:太奇葩的需求!不过还是希望下面实现过程中讲解的思路能帮 ...