<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

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

          共 2755字,需瀏覽 6分鐘

           ·

          2022-07-24 23:46

          設(shè)計模式自學指南,幾分鐘掌握學習重點

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

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

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

          主要是以下幾個問題:

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

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

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

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

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

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

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

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

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

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

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

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

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

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

          什么時候?qū)W?

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

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

          要學什么?

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

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

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

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

          2. 學習主流設(shè)計模式

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

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

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

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

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

          設(shè)計模式學習路線

          建議大家按照以下 3 個階段來學習:

          一、基礎(chǔ)學習

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

          學習方式有很多種:

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

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

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

          二、編碼實現(xiàn)

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

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

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

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

          三、項目實戰(zhàn)

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

          這里給大家兩個學習方法吧:

          1. 搜索式

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

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

          2. 探索式

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

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

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

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

          面試考點

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

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

          實踐就是讓你手寫某個設(shè)計模式。最??嫉木褪菃卫J?,我就被考過,當時還讓我寫出幾種不同的單例模式實現(xiàn)。

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

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



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

          掃碼體驗:

          往期推薦

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

          給大家鼓鼓勁!

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

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

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

          瀏覽 96
          點贊
          評論
          收藏
          分享

          手機掃一掃分享

          分享
          舉報
          評論
          圖片
          表情
          推薦
          點贊
          評論
          收藏
          分享

          手機掃一掃分享

          分享
          舉報
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  99re99爱视频 | 久久国产精品国产色婷婷 | 久久夜色国产精品噜噜AVAV | 激情四月五月婷婷小电影 | 亚洲成人人体艺术在线观看 |