1. <strong id="7actg"></strong>
    2. <table id="7actg"></table>

    3. <address id="7actg"></address>
      <address id="7actg"></address>
      1. <object id="7actg"><tt id="7actg"></tt></object>

        什么是設(shè)計模式?程序員如何學(xué)好設(shè)計模式?

        共 1907字,需瀏覽 4分鐘

         ·

        2021-12-09 18:21

        前幾天,我給大家介紹了算法數(shù)據(jù)結(jié)構(gòu)的基礎(chǔ)知識。后來又有小伙伴私問我:“小灰,你能不能也講一講設(shè)計模式的相關(guān)知識?”


        沒問題!對于程序員來說,設(shè)計模式也是必須要掌握的一項核心知識,我今天就來給大家重點講一講。



        編程的痛點


        那么,到底什么是設(shè)計模式呢?


        在介紹這個概念之前,我先問問大家,在你們的工作當(dāng)中,有沒有接手過“祖?zhèn)鞔a”?也就是老板讓你維護前一任程序員寫的老項目。


        小灰自己做過10年的程序員,有過很多次這樣的經(jīng)歷。這些個祖?zhèn)鞔a,有相當(dāng)一部分壓根兒不知道寫的是什么,注釋非常少,結(jié)構(gòu)也很混亂,不敢修改也不敢刪除。



        當(dāng)初寫下這些代碼的前任,要么已經(jīng)離職了,根本找不到人來問。


        就算他還在職,能找到人,想問對方一點代碼的問題,也還得看對方的臉色。


        這就是祖?zhèn)鞔a的痛苦。



        設(shè)計模式是什么


        我們該怎么辦呢?


        許多前輩程序員經(jīng)過長期實踐,總結(jié)出了一系列的解決方案。這些解決方案可以提高代碼的可讀性,增加代碼的可重用性,保證代碼的可擴展性。


        這一系列解決方案,被人們稱為設(shè)計模式,它是面向?qū)ο缶幊坍?dāng)中的各種經(jīng)典套路。


        設(shè)計模式是一種抽象的編程思想,并不局限于某一特定的編程語言,而是在許多語言之間相通的。比如在Java、C#、C++語言當(dāng)中,都可以使用到設(shè)計模式。


        但設(shè)計模式也有它的邊界,它的適用范圍是面向?qū)ο蟮木幊陶Z言。對于面向過程語言、函數(shù)式編程語言,談?wù)撛O(shè)計模式是沒有意義的。


        如果有人跟你說,F(xiàn)ortran語言當(dāng)中的設(shè)計模式非常好用,或者說自己在學(xué)習(xí)Lisp語言當(dāng)中的設(shè)計模式,這人一定是一個假程序員。




        設(shè)計模式的分類


        那么,程序員前輩們一共總結(jié)出了多少種設(shè)計模式呢?


        在1995年,有四位編程界的大佬合著了一本書,書名叫做《Design Patterns: Elements of Reusable Object-Oriented Software》,翻譯過來就是《設(shè)計模式:可復(fù)用面向?qū)ο筌浖幕A(chǔ)》,書里面總共收錄了23種設(shè)計模式。


        這本書是軟件研發(fā)領(lǐng)域重要的里程碑,合著此書的四位作者,被業(yè)內(nèi)稱為GoF(Gang of Four),因此這本書也被人稱為GoF設(shè)計模式。


        這23種設(shè)計模式,又可以根據(jù)設(shè)計的目的,分為大大類型:


        第一類:創(chuàng)建型模式


        這一類設(shè)計模式的目的是用于創(chuàng)建對象。比如大家常用的工廠模式、單例模式,就屬于創(chuàng)建型模式。


        第二類:結(jié)構(gòu)型模式


        這一類設(shè)計模式的目的是優(yōu)化不同類、對象、接口之間的結(jié)構(gòu)關(guān)系。比較常用的代理模式、裝飾者模式,就屬于結(jié)構(gòu)型模式。


        第三類:行為型模式


        這一類設(shè)計模式的目的是更好地實現(xiàn)類與類之間的交互以及算法的執(zhí)行。比如策略模式、觀察者模式,就屬于行為型模式。


        下面這張圖,總結(jié)了所有23種設(shè)計模式的分類,大家可以收藏一下。




        可能有的人會覺得疑惑:網(wǎng)上有很多程序員總是說到24種設(shè)計模式,你這里怎么只說了23種呢?


        其實,這兩種說法都沒錯,24種設(shè)計模式是在原有23種的基礎(chǔ)上,補充了一個空對象模式,它屬于行為型模式。

        此外,隨著編程領(lǐng)域的不斷發(fā)展,有很多新的設(shè)計模式不斷被人提出來,目前人們所用到的設(shè)計模式其實遠遠不止24種。


        比如生產(chǎn)者消費者模式,發(fā)布訂閱模式等等,他們都不在24種設(shè)計模式當(dāng)中,但仍然非常常用。


        可能有些做后臺開發(fā)的朋友會問了:我們平時用到的MVC模式,是不是也屬于設(shè)計模式呢?



        以我個人的觀點,設(shè)計模式所研究的是類與對象、接口之間的關(guān)系,解決的是某一個特定問題。


        而MVC,研究的是代碼模塊之間的關(guān)系,并且提供的是一攬子解決方案。所以MVC屬于一種架構(gòu),而不是設(shè)計模式。



        如何學(xué)習(xí)設(shè)計模


        那么,我們怎么才能學(xué)好設(shè)計模式呢?


        就像學(xué)習(xí)算法和數(shù)據(jù)結(jié)構(gòu)一樣,我們可以通過看書、看網(wǎng)上的視頻課程,來了解各種設(shè)計模式的思想和實現(xiàn)。


        入門級別的書,比較推薦程杰老師的《大話設(shè)計模式》


        進階級別的書,推薦看看《Head First 設(shè)計模式》這本書。


        課程的話,推薦極客時間王爭老師的《設(shè)計模式之美》,同時在B站上也有一些比較優(yōu)質(zhì)的設(shè)計模式課程,我會把課程鏈接發(fā)到本視頻的置頂回復(fù)當(dāng)中。


        與此同時,大家也可以多看看一些經(jīng)典框架的源碼,里面也采用了很多的設(shè)計模式。比如Java程序員常用的Spring框架,里面就使用了工廠模式、代理模式、單例模式、適配器模式等等。



        這樣既能熟悉框架的原理,也能加深對設(shè)計模式的理解,可謂是一舉兩得。


        大家都是通過哪些途徑學(xué)習(xí)的設(shè)計模式?歡迎寫在留言區(qū)。


        瀏覽 25
        點贊
        評論
        收藏
        分享

        手機掃一掃分享

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

        手機掃一掃分享

        分享
        舉報
        1. <strong id="7actg"></strong>
        2. <table id="7actg"></table>

        3. <address id="7actg"></address>
          <address id="7actg"></address>
          1. <object id="7actg"><tt id="7actg"></tt></object>
            欧美夜 | 岛国乱婬A片免费看 | 大香蕉伊人视频 | 人人看人人爱 | 九色自拍论坛 | 91丝袜呻吟高潮美腿白嫩校花 | 一级黄色一级黄色 | 女人黄色大片子色 | 熟女性爱自拍 | 美女露全胸视频 |