01 - 為什么要學(xué)設(shè)計模式妒御?

很多程序員都已經(jīng)意識到基礎(chǔ)知識的重要性,覺得要夯實基礎(chǔ)每币,才能走得更遠(yuǎn)携丁,但同時對于如何將基礎(chǔ)知識轉(zhuǎn)化成開發(fā)“生產(chǎn)力”仍然有些疑惑

  • 所以,你可能看了很多基礎(chǔ)的書籍兰怠,比如操作系統(tǒng)梦鉴、組成原理、編譯原理等揭保,但還是覺得很迷茫肥橙,覺得在開發(fā)中用不上,起碼在平時的 CRUD 業(yè)務(wù)開發(fā)中用不上
  • 實際上秸侣,這些基礎(chǔ)的知識確實很難直接轉(zhuǎn)化成開發(fā)“生產(chǎn)力”存筏。但是,它能潛移默化地味榛、間接地提高你對技術(shù)的理解

不過椭坚,設(shè)計模式和操作系統(tǒng)、組成原理搏色、編譯原理等這些基礎(chǔ)學(xué)科是不一樣的善茎。

  • 它雖然也算是一門基礎(chǔ)知識,但是它和數(shù)據(jù)結(jié)構(gòu)频轿、算法更像是一道兒的垂涯,相比那些更加基礎(chǔ)的學(xué)科,設(shè)計模式能更直接地提高你的開發(fā)能力航邢。
  • 如果說數(shù)據(jù)結(jié)構(gòu)和算法是教你如何寫出高效代碼耕赘,那設(shè)計模式講的是如何寫出可擴(kuò)展、可讀膳殷、可維護(hù)的高質(zhì)量代碼操骡,所以,它們跟平時的編碼會有直接的關(guān)系,也會直接影響到你的開發(fā)能力当娱。

不過吃既,你可能還是會覺得設(shè)計模式是把屠龍刀,看起來很厲害跨细,但平時的開發(fā)根本用不上鹦倚。基于這種觀點冀惭,接下來冰抢,我們就具體地聊一聊可柿,我們?yōu)槭裁匆獙W(xué)習(xí)設(shè)計模式浦徊?

1. 應(yīng)對面試

  • 不管你是前端工程師园匹、后端工程師,還是全棧工程師戚丸,在求職面試中划址,設(shè)計模式問題是被問得頻率比較高的一類問題。特別是一些像 BAT限府、TMD 這樣的大公司夺颤,比較重視候選人的基本功,經(jīng)常會拿算法胁勺、設(shè)計模式之類的問題來考察候選人
  • 系統(tǒng)學(xué)習(xí)設(shè)計模式之后世澜,后面只需要花很少時間就能溫故設(shè)計模式相關(guān)知識,起到事半功倍的效果署穗,避免面試吃癟

2. 告別寫出爛代碼

  • 我們經(jīng)常說寥裂,“Talk is cheap,show me the code案疲》馇。”實際上,代碼能力是一個程序員最基礎(chǔ)的能力褐啡,是基本功俭驮,是展示一個程序員基礎(chǔ)素養(yǎng)的最直接的衡量標(biāo)準(zhǔn)。你寫的代碼春贸,實際上就是你名片
  • 工作過程中大家都見過甚至寫過爛代碼,比如命名不規(guī)范遗遵、類設(shè)計不合理萍恕、分層不清晰、沒有模塊化概念车要、代碼結(jié)構(gòu)混亂允粤、高度耦合等等。這樣的代碼維護(hù)起來非常費勁,添加或者修改一個功能类垫,常常會牽一發(fā)而動全身司光,讓你無從下手,恨不得將全部的代碼刪掉重寫悉患!
  • 另外残家,如果你看到了高質(zhì)量的代碼,會立刻對作者產(chǎn)生無比的好感和認(rèn)可售躁。且不管這個人處在公司的何種級別坞淮,從代碼就能看出,他是一個基礎(chǔ)扎實的高潛員工陪捷,值得培養(yǎng)回窘,前途無量!因此市袖,代碼寫得好啡直,能讓你在團(tuán)隊中脫穎而出

3. 提高復(fù)雜代碼的設(shè)計和開發(fā)能力

  • 大部分工程師比較熟悉的都是編程語言、工具苍碟、框架這些東西酒觅,因為每天的工作就是在框架里根據(jù)業(yè)務(wù)需求,填充代碼驰怎。這樣的工作并不需要你具備很強(qiáng)的代碼設(shè)計能力阐滩,只要單純地能理解業(yè)務(wù),翻譯成代碼就可以了
  • 但是县忌,面對編寫業(yè)務(wù)無關(guān)的通用功能模塊掂榔,這樣稍微復(fù)雜的代碼設(shè)計和開發(fā),可能會出現(xiàn)不知從何下手的情況症杏。因為我們知道只是完成功能装获、代碼能用,可能并不復(fù)雜厉颤,但是要想寫出易擴(kuò)展穴豫、易用、易維護(hù)的代碼逼友,并不容易
  • 如何分層精肃、分模塊?應(yīng)該怎么劃分類帜乞?每個類應(yīng)該具有哪些屬性司抱、方法?怎么設(shè)計類之間的交互黎烈?該用繼承還是組合习柠?該使用接口還是抽象類匀谣?怎樣做到解耦、高內(nèi)聚低耦合资溃?該用單例模式還是靜態(tài)方法武翎?用工廠模式創(chuàng)建對象還是直接 new 出來?如何避免引入設(shè)計模式提高擴(kuò)展性的同時帶來的降低可讀性問題溶锭?
  • 面對復(fù)雜代碼宝恶、功能、系統(tǒng)的設(shè)計和開發(fā)暖途,如果你掌握了設(shè)計模式相關(guān)方法卑惜,相信面對這些功能實現(xiàn)會越來越得心應(yīng)手,游刃有余驻售。寫出高質(zhì)量代碼慢慢會成為一種習(xí)慣

4. 讓讀源碼露久、學(xué)框架事半功倍

  • 對于一個有追求的程序員來說,對技術(shù)的積累欺栗,既要有廣度毫痕,也要有深度。很多技術(shù)人早早就意識到了這一點迟几,所以在學(xué)習(xí)框架消请、中間件的時候,都會抽空去研究研究原理类腮,讀一讀源碼臊泰,希望能在深度上有所積累,而不只是略知皮毛蚜枢,會用而已
  • 有些人看源碼的時候缸逃,經(jīng)常會遇到看不懂、看不下去的問題厂抽。不知道你有沒有遇到過這種情況需频?實際上,這個問題的原因很簡單筷凤,那就是你積累的基本功還不夠昭殉,你的能力還不足以看懂這些代碼。
  • 優(yōu)秀的開源項目藐守、框架挪丢、中間件,代碼量卢厂、類的個數(shù)都會比較多吃靠,類結(jié)構(gòu)、類之間的關(guān)系極其復(fù)雜足淆,常常調(diào)用來調(diào)用去巢块。所以,為了保證代碼的擴(kuò)展性巧号、靈活性族奢、可維護(hù)性等,代碼中會使用到很多設(shè)計模式丹鸿、設(shè)計原則或者設(shè)計思想越走。如果你不懂這些設(shè)計模式、原則靠欢、思想廊敌,在看代碼的時候,你可能就會琢磨不透作者的設(shè)計思路门怪,對于一些很明顯的設(shè)計思路骡澈,你可能要花費很多時間才能參悟。相反掷空,如果你對設(shè)計模式肋殴、原則、思想非常了解坦弟,一眼就能參透作者的設(shè)計思路护锤、設(shè)計初衷,很快就可以把腦容量釋放出來酿傍,重點思考其他問題烙懦,代碼讀起來就會變得輕松了
  • 實際上,除了看不懂赤炒、看不下去的問題氯析,還有一個隱藏的問題,你可能自己都發(fā)現(xiàn)不了可霎,那就是你自己覺得看懂了魄鸦,實際上,里面的精髓你并沒有 get 到多少癣朗!因為優(yōu)秀的開源項目拾因、框架、中間件旷余,就像一個集各種高精尖技術(shù)在一起的戰(zhàn)斗機(jī)绢记。如果你想剖析它的原理、學(xué)習(xí)它的技術(shù)正卧,而你沒有積累深厚的基本功蠢熄,就算把這臺戰(zhàn)斗機(jī)擺在你面前,你也不能完全參透它的精髓炉旷,只是了解個皮毛签孔,看個熱鬧而已
  • 因此叉讥,學(xué)好設(shè)計模式相關(guān)的知識,不僅能讓你更輕松地讀懂開源項目饥追,還能更深入地參透里面的技術(shù)精髓图仓,做到事半功倍

5. 為你的職場發(fā)展做鋪墊

  • 如果你不想一輩子做一個低級的碼農(nóng),想成長為技術(shù)專家但绕、大牛救崔、技術(shù) leader,希望在職場有更高的成就捏顺、更好的發(fā)展六孵,那就要重視基本功的訓(xùn)練、基礎(chǔ)知識的積累
  • 在技術(shù)這條職場道路上幅骄,當(dāng)成長到一定階段之后劫窒,你勢必要承擔(dān)一些指導(dǎo)培養(yǎng)初級員工、新人昌执,以及 code review 的工作烛亦。這個時候,如果你自己都對“什么是好的代碼懂拾?如何寫出好的代碼煤禽?”不了解,那又該如何指導(dǎo)別人岖赋,如何讓人家信服呢檬果?
  • 如果你是一個技術(shù) leader,負(fù)責(zé)一個項目整體的開發(fā)工作唐断,你就需要為開發(fā)進(jìn)度选脊、開發(fā)效率和項目質(zhì)量負(fù)責(zé)。你也不希望團(tuán)隊堆砌垃圾代碼脸甘,讓整個項目無法維護(hù)恳啥,添加、修改一個功能都要費老大勁丹诀,最終拉低整個團(tuán)隊的開發(fā)效率吧钝的?
  • 除此之外,代碼質(zhì)量低還會導(dǎo)致線上 bug 頻發(fā)铆遭,排查困難硝桩。整個團(tuán)隊都陷在成天修改無意義的低級 bug、在爛代碼中添補(bǔ)丁的事情中枚荣。而一個設(shè)計良好碗脊、易維護(hù)的系統(tǒng),可以解放我們的時間橄妆,讓我們做些更加有意義衙伶、更能提高自己和團(tuán)隊能力的事情

小結(jié)

本文講了為什么要學(xué)習(xí)設(shè)計模式相關(guān)的知識祈坠,總結(jié)一下的話,主要有這樣五點:應(yīng)對面試中的設(shè)計模式相關(guān)問題矢劲;告別寫被人吐槽的爛代碼颁虐;提高復(fù)雜代碼的設(shè)計和開發(fā)能力;讓讀源碼卧须、學(xué)框架事半功倍;為你的職場發(fā)展做鋪墊
設(shè)計模式作為一門與編碼儒陨、開發(fā)有著直接關(guān)系的基礎(chǔ)知識花嘶,是你現(xiàn)在就要開始學(xué)習(xí)的。早點去學(xué)習(xí)蹦漠,以后的項目就都可以拿來鍛煉椭员,每寫一行代碼都是對內(nèi)功的利用和加深,是可以受益一整個職業(yè)生涯的事情

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末笛园,一起剝皮案震驚了整個濱河市隘击,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌研铆,老刑警劉巖埋同,帶你破解...
    沈念sama閱讀 211,561評論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異棵红,居然都是意外死亡凶赁,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,218評論 3 385
  • 文/潘曉璐 我一進(jìn)店門逆甜,熙熙樓的掌柜王于貴愁眉苦臉地迎上來虱肄,“玉大人,你說我怎么就攤上這事交煞∮搅” “怎么了?”我有些...
    開封第一講書人閱讀 157,162評論 0 348
  • 文/不壞的土叔 我叫張陵素征,是天一觀的道長集嵌。 經(jīng)常有香客問我,道長稚茅,這世上最難降的妖魔是什么纸淮? 我笑而不...
    開封第一講書人閱讀 56,470評論 1 283
  • 正文 為了忘掉前任,我火速辦了婚禮亚享,結(jié)果婚禮上咽块,老公的妹妹穿的比我還像新娘。我一直安慰自己欺税,他們只是感情好侈沪,可當(dāng)我...
    茶點故事閱讀 65,550評論 6 385
  • 文/花漫 我一把揭開白布揭璃。 她就那樣靜靜地躺著,像睡著了一般亭罪。 火紅的嫁衣襯著肌膚如雪瘦馍。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,806評論 1 290
  • 那天应役,我揣著相機(jī)與錄音情组,去河邊找鬼。 笑死箩祥,一個胖子當(dāng)著我的面吹牛院崇,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播袍祖,決...
    沈念sama閱讀 38,951評論 3 407
  • 文/蒼蘭香墨 我猛地睜開眼底瓣,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了蕉陋?” 一聲冷哼從身側(cè)響起捐凭,我...
    開封第一講書人閱讀 37,712評論 0 266
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎凳鬓,沒想到半個月后茁肠,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 44,166評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡村视,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,510評論 2 327
  • 正文 我和宋清朗相戀三年官套,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片蚁孔。...
    茶點故事閱讀 38,643評論 1 340
  • 序言:一個原本活蹦亂跳的男人離奇死亡奶赔,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出杠氢,到底是詐尸還是另有隱情站刑,我是刑警寧澤,帶...
    沈念sama閱讀 34,306評論 4 330
  • 正文 年R本政府宣布鼻百,位于F島的核電站绞旅,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏温艇。R本人自食惡果不足惜因悲,卻給世界環(huán)境...
    茶點故事閱讀 39,930評論 3 313
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望勺爱。 院中可真熱鬧晃琳,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,745評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至顾翼,卻和暖如春投放,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背适贸。 一陣腳步聲響...
    開封第一講書人閱讀 31,983評論 1 266
  • 我被黑心中介騙來泰國打工灸芳, 沒想到剛下飛機(jī)就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人拜姿。 一個月前我還...
    沈念sama閱讀 46,351評論 2 360
  • 正文 我出身青樓耗绿,卻偏偏與公主長得像,于是被迫代替她去往敵國和親砾隅。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 43,509評論 2 348

推薦閱讀更多精彩內(nèi)容