二維碼
微世推網(wǎng)

掃一掃關(guān)注

當(dāng)前位置: 首頁 » 快聞頭條 » 動態(tài)資訊 » 正文

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

放大字體  縮小字體 發(fā)布日期:2022-02-14 21:57:40    作者:高瑟    瀏覽次數(shù):178
導(dǎo)讀

前幾天,我給大家介紹了算法和數(shù)據(jù)結(jié)構(gòu)得基礎(chǔ)知識。后來又有小伙伴私信問我:“小灰,你能不能也講一講設(shè)計(jì)模式得相關(guān)知識?”沒問題!對于程序員來說,設(shè)計(jì)模式也是必須要掌握得一項(xiàng)核心知識,我今天就來給大家重點(diǎn)

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

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

編程得痛點(diǎn)

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

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

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

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

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

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

設(shè)計(jì)模式是什么

我們該怎么辦呢?

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

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

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

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

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

設(shè)計(jì)模式得分類

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

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

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

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

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

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

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

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

第三類:行為型模式

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

好了,關(guān)于設(shè)計(jì)模式得基本概念,我就給大家介紹到這里。如果覺得這篇文章對你有幫助,希望可以點(diǎn)個贊,!

 
(文/高瑟)
免責(zé)聲明
本文僅代表發(fā)布者:高瑟個人觀點(diǎn),本站未對其內(nèi)容進(jìn)行核實(shí),請讀者僅做參考,如若文中涉及有違公德、觸犯法律的內(nèi)容,一經(jīng)發(fā)現(xiàn),立即刪除,需自行承擔(dān)相應(yīng)責(zé)任。涉及到版權(quán)或其他問題,請及時聯(lián)系我們刪除處理郵件:weilaitui@qq.com。
 

Copyright?2015-2025 粵公網(wǎng)安備 44030702000869號

粵ICP備16078936號

微信

關(guān)注
微信

微信二維碼

WAP二維碼

客服

聯(lián)系
客服

聯(lián)系客服:

24在線QQ: 770665880

客服電話: 020-82301567

E_mail郵箱: weilaitui@qq.com

微信公眾號: weishitui

韓瑞 小英 張澤

工作時間:

周一至周五: 08:00 - 24:00

反饋

用戶
反饋