1. 還有設(shè)計模式這種東西嘛。。。

        共 2755字,需瀏覽 6分鐘

         ·

        2022-07-24 23:46

        設(shè)計模式自學(xué)指南,幾分鐘掌握學(xué)習(xí)重點(diǎn)

        大家好,我是魚皮,前段時間我在 B 站發(fā)布了一個【設(shè)計模式】的導(dǎo)學(xué)視頻。不出所料,無論我怎么改標(biāo)題,這個視頻的播放量都無比慘淡,側(cè)面反映了設(shè)計模式?jīng)]有那么大眾化吧。。。

        我感覺還是挺遺憾的,明明是一個軟件開發(fā)人員必備的重點(diǎn)知識技能,但是卻沒有像算法、計網(wǎng)之類的那么流行。而且看了評論區(qū)后,我發(fā)現(xiàn)別說很多同學(xué)沒有系統(tǒng)學(xué)習(xí)過它,甚至都不知道有設(shè)計模式這么個東西!

        所以這篇文章是希望給大家強(qiáng)調(diào)一下設(shè)計模式的重要性,并且分享一下我自學(xué)設(shè)計模式的經(jīng)驗。

        主要是以下幾個問題:

        • 設(shè)計模式是什么?有什么用?為什么要學(xué)它?
        • 什么時候?qū)W?
        • 要學(xué)什么知識?哪些是重點(diǎn)?
        • 怎么學(xué)?有哪些方法和資源?
        • 以及面試的時候可能會考什么?

        花幾分鐘了解這幾個問題后,再去學(xué)設(shè)計模式,相信能幫助大家抓住重點(diǎn),節(jié)省時間、更高效地自學(xué)。

        什么是設(shè)計模式?

        設(shè)計模式是我們開發(fā)軟件時針對常見問題的 通用 解決方案,也是前輩們在寫代碼時不斷摸索總結(jié)出來的好方法。

        可以理解為打游戲的攻略,就是我們遇到同一類的對手時,怎么走位、怎么放技能之類的。

        設(shè)計模式有什么用?

        設(shè)計模式最直接的作用就是 減少爛代碼、讓項目代碼更好維護(hù)

        舉個栗子,如果沒學(xué)過設(shè)計模式,可能隨著產(chǎn)品不斷加需求、改需求,你的代碼會充滿大量的 if else,新同事來了呢,也不敢動前人代碼,只能再去補(bǔ)充 if else,于是屎山越堆越高。

        而使用設(shè)計模式后,你可以把每段邏輯單獨(dú)封裝和維護(hù),大家協(xié)作開發(fā)也會更高效。

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

        學(xué)好設(shè)計模式,不僅能讓我們寫出更好維護(hù)、性能更高的代碼,還能開拓我們的思維,在遇到問題時能想到更多的解決方案。

        因此設(shè)計模式也是軟件開發(fā)崗面試的重點(diǎn),想進(jìn)大廠的同學(xué)一定要學(xué)習(xí)它。

        此外,很多知名項目都用到了大量的設(shè)計模式,比如 Spring、MyBatis 等。如果不學(xué)習(xí)它,可能你天天寫代碼都是 CRUD、讀別人的源碼會非常吃力。

        所以建議開發(fā)崗的朋友們都要認(rèn)真學(xué)習(xí)設(shè)計模式。

        什么時候?qū)W?

        我建議大家在學(xué)過一門編程語言、并且能夠使用開發(fā)框架去完成項目之后,再去學(xué)設(shè)計模式。如果你寫代碼的熟練度還不夠的話,直接去學(xué)設(shè)計模式會比較吃力,可能也無法理解用設(shè)計模式的好處。

        那如果你學(xué)前端的話,我建議你先把界面開發(fā)、JS 語法、組件庫和 Vue / React 之類的框架運(yùn)用熟練,有空了再把設(shè)計模式作為進(jìn)階知識來學(xué)習(xí)就好。

        要學(xué)什么?

        設(shè)計模式的學(xué)習(xí)主要分為兩部分:

        1. 軟件開發(fā)原則

        所有的設(shè)計模式基本都是建立以下幾個軟件開發(fā)原則的基礎(chǔ)上。

        比如開閉原則,就是建議我們把模塊設(shè)計的好擴(kuò)展一些,每次新增功能只需要加代碼、而不用改老代碼。

        2. 學(xué)習(xí)主流設(shè)計模式

        主流的設(shè)計模式共有以下 23 種:

        注意,不是說設(shè)計模式只有 23 種!

        設(shè)計模式學(xué)習(xí)路線 by 程序員魚皮

        其中單例、工廠方法、建造者、適配器、裝飾器、代理、策略、責(zé)任鏈、觀察者、迭代器模式是重點(diǎn),我自己工作中經(jīng)常用到這些、也總能在框架源碼中見到它們。這些設(shè)計模式的特色也比較鮮明、相對比較好理解。

        尤其是單例模式,是重點(diǎn)中的重點(diǎn)!它有很多種不同的實現(xiàn)方式,都要了解。我用的最多的應(yīng)該是餓漢式還有雙檢鎖模式。

        設(shè)計模式學(xué)習(xí)路線

        建議大家按照以下 3 個階段來學(xué)習(xí):

        一、基礎(chǔ)學(xué)習(xí)

        目標(biāo):從上面提到的重點(diǎn)開始依次了解每一種設(shè)計模式的概念、作用、應(yīng)用場景、特點(diǎn)、類和對象的關(guān)系,能夠?qū)υO(shè)計模式有個基礎(chǔ)的印象。

        學(xué)習(xí)方式有很多種:

        • 喜歡看視頻的同學(xué)挑個高播放量的、講師口音能接受的教程看就好了;
        • 喜歡讀書的同學(xué)可以看《圖解設(shè)計模式》、《大話設(shè)計模式》,個人感覺這兩本書都還不錯,我自己是看前者入門的。
        • 想快速上手的同學(xué)可以直接看菜鳥教程的文檔,每個設(shè)計模式都有講解和代碼示例,還是比較推薦的。像我有的時候忘了某個冷門的設(shè)計模式,也是靠這個文檔快速補(bǔ)回來。

        這里建議大家在學(xué)設(shè)計模式的時候多和實際生活結(jié)合,會更好理解一些。

        比如適配器模式可以理解為用一個轉(zhuǎn)接頭連接兩根線;代理模式理解為你找了個代購幫你去買東西;責(zé)任鏈模式理解為公司出了問題,員工依次甩鍋。

        二、編碼實現(xiàn)

        這個階段的目標(biāo)是:用你熟悉的編程語言來寫代碼實現(xiàn)每個設(shè)計模式,要能夠獨(dú)立(不借助任何資料)從 0 寫出完整代碼,這樣才算是學(xué)會了。

        如果剛開始大家不知道設(shè)計模式怎么應(yīng)用的話,我建議去看一些示例代碼。

        可以直接在 GitHub 搜索關(guān)鍵詞 Design Pattern設(shè)計模式 ,就能搜出來一大堆不同語言的代碼了。

        那我建議大家把自己寫過的代碼保存好,可以打造一個自己的設(shè)計模式代碼庫,寫在簡歷上也是能加分的。

        三、項目實戰(zhàn)

        本階段的目標(biāo):能夠根據(jù)某個場景主動選出合適的設(shè)計模式來優(yōu)化代碼,而不是說別人告訴你這里能用設(shè)計模式,你才想起來去用。這就是架構(gòu)師和擰螺絲的區(qū)別。

        這里給大家兩個學(xué)習(xí)方法吧:

        1. 搜索式

        花時間到網(wǎng)上搜設(shè)計模式在知名框架中的應(yīng)用,比如 Spring:

        網(wǎng)上的文章很多,我就不一一列舉了。比較建議大家在面試前這么干,可以快速積累。

        2. 探索式

        就是在你寫代碼的過程中,一旦遇到重復(fù)代碼,就問一下自己:我能不能用上某個設(shè)計模式呢?合適的話就使用設(shè)計模式。次數(shù)多了,你就有經(jīng)驗了。

        此外,我自己在寫代碼時,特別喜歡點(diǎn)進(jìn)源碼看一看,一般是能夠通過文件命名來快速判斷出它是否使用了設(shè)計模式的,然后你就可以進(jìn)一步讀源碼來學(xué)習(xí),幫助我積累了很多知識。

        但我們也要注意,設(shè)計模式雖然好用,但它不是銀彈,不要為了用而用。

        比如非要把一句簡單的 if else 搞成策略模式,過分使用設(shè)計模式只會徒增系統(tǒng)的復(fù)雜度。

        面試考點(diǎn)

        面試時對設(shè)計模式的考察可能比較多元,主要有理論、實踐、源碼等考法:

        理論就是問你不同設(shè)計模式的概念、優(yōu)缺點(diǎn)、應(yīng)用場景,設(shè)計模式之間的區(qū)別等等。

        實踐就是讓你手寫某個設(shè)計模式。最常考的就是單例模式,我就被考過,當(dāng)時還讓我寫出幾種不同的單例模式實現(xiàn)。

        源碼就是說問你某個框架用了哪些設(shè)計模式,或者某個設(shè)計模式在哪些框架中應(yīng)用過。如果我是面試官,大概率會這么考,因為能看出候選人的知識儲備。

        所以要想在設(shè)計模式這塊不吃癟,除了背八股文外,還是要保證能手寫出??嫉脑O(shè)計模式,并且多去了解一下它在知名項目中的應(yīng)用。



        以上就是本期分享。最后,歡迎加入 魚皮的編程知識星球,抱團(tuán)交流學(xué)習(xí)編程,隨時向魚皮 1 對 1 提問、幫你制定學(xué)習(xí)和求職計劃不迷茫、跟著魚皮直播做項目(往期項目可無限回看)、領(lǐng)取魚皮原創(chuàng)編程學(xué)習(xí) / 求職資料等。

        掃碼體驗:

        往期推薦

        Google搜索為什么不能無限分頁?

        給大家鼓鼓勁!

        時隔半年,Linux 性能超越 Windows 11 !

        Vite 3.0 發(fā)布: 核心更新盤點(diǎn)與分析

        100 行代碼搞定 RPC ,面試官...

        瀏覽 96
        點(diǎn)贊
        評論
        收藏
        分享

        手機(jī)掃一掃分享

        分享
        舉報
        評論
        圖片
        表情
        推薦
        點(diǎn)贊
        評論
        收藏
        分享

        手機(jī)掃一掃分享

        分享
        舉報
          
          

            1. 老熟女最黄一级片大全 | 亚洲日韩精品高潮无码久久岛国久 | 日本在线视频一区二区 | 亚洲电影免费在线观看 | 三级久久久 |