閑談設(shè)計模式

閑談設(shè)計模式

Intro

設(shè)計模式(Design Pattern)是一套被反復(fù)使用、多數(shù)人知曉的锨天、經(jīng)過分類的毯盈、代碼設(shè)計經(jīng)驗(yàn)的總結(jié)。

了解這些前輩們總結(jié)出來的經(jīng)驗(yàn)有助于幫助你寫出來更優(yōu)秀的代碼病袄,幫助你寫出可擴(kuò)展搂赋、可讀、可維護(hù)的高質(zhì)量代碼益缠。

在極客時間里推出了數(shù)據(jù)結(jié)構(gòu)和設(shè)計模式的王爭說了一句話脑奠,如果說“數(shù)據(jù)結(jié)構(gòu)與算法之美”是教你寫出高效的代碼,那設(shè)計模式就是教你寫出高質(zhì)量的代碼幅慌。

為什么要學(xué)習(xí)設(shè)計模式

  1. 提升自己代碼質(zhì)量宋欺,告別寫被人吐槽的爛代碼
  2. 提高復(fù)雜代碼的設(shè)計和開發(fā)能力,設(shè)計出擴(kuò)展性良好胰伍,可維護(hù)性更強(qiáng)齿诞,可復(fù)用性更好的代碼
  3. 讓讀源碼、學(xué)框架事半功倍骂租,學(xué)會設(shè)計模式掌挚,在看框架源碼的時候會更好的理解框架中的一些功能設(shè)計
  4. 為你的職場發(fā)展做鋪墊,提升自己 code review 能力菩咨,把控團(tuán)隊代碼質(zhì)量

設(shè)計模式設(shè)計原則

設(shè)計原則是指導(dǎo)我們代碼設(shè)計的一些經(jīng)驗(yàn)總結(jié),對于每一種設(shè)計原則,我們需要掌握它的設(shè)計初衷抽米,能解決哪些編程問題特占,有哪些應(yīng)用場景。只有這樣云茸,我們才能在項(xiàng)目中靈活恰當(dāng)?shù)貞?yīng)用這些原則是目。

  • 單一職責(zé)原則

    對于一個類而言,應(yīng)該僅有一個引起它變化的原因

    如果一個類承擔(dān)的職責(zé)過多标捺,就等于把這些職責(zé)耦合再一起懊纳,一個職責(zé)的變化可能會削弱或者抑制這個類完全其他職責(zé)的能力。這種耦合會導(dǎo)致脆弱的設(shè)計亡容,當(dāng)發(fā)生變化時嗤疯,設(shè)計會遭受到意想不到的破壞。

  • 開放-封閉原則

    開放-封閉原則是說軟件實(shí)體(類闺兢、模塊茂缚、函數(shù)等等)應(yīng)該可以擴(kuò)展,但是不可修改屋谭。

    對于擴(kuò)展開放脚囊,對于更改封閉

  • 依賴倒轉(zhuǎn)原則

    • 高層模塊不應(yīng)該依賴低層模式,兩個都應(yīng)該依賴抽象桐磁。
    • 抽象不應(yīng)該依賴細(xì)節(jié)悔耘,細(xì)節(jié)應(yīng)該依賴于抽象∥依蓿基于接口編程衬以。
  • 里氏代換原則

    子類型必須能夠替換掉它們的父類型

  • 接口隔離原則

    使用多個隔離的接口,比使用單個接口好,建立最小的接口

    一個接口只負(fù)責(zé)一個功能

  • 迪米特法則

    如果兩個類不必彼此通信扶踊,那么這兩個類就不應(yīng)當(dāng)發(fā)生直接的相互作用泄鹏。如果其中一個類需要調(diào)用另一個類的某一個方法,可以通過第三者轉(zhuǎn)發(fā)這個調(diào)用秧耗。

    類的結(jié)構(gòu)設(shè)計上备籽,每一個類都應(yīng)當(dāng)盡量降低成員的訪問權(quán)限

    類之間的耦合越弱,越有利于復(fù)用分井,一個處在弱耦合的類別修改车猬,不會對有關(guān)系的類造成波及

Overview 概覽

【DesignPatterns】 項(xiàng)目是用 C# 寫的一些設(shè)計模式的示例,基于 .netcore 3.1尺锚,大部分示例來自《大話設(shè)計模式》

設(shè)計模式大體上可分為三類:

More

我們上面提到的設(shè)計原則有六個珠闰,現(xiàn)在有的文章說是有七個,多出來的一個原則是 “組合由于繼承”瘫辩,主要是強(qiáng)調(diào)多用組合而非繼承伏嗜,因?yàn)槔^承可能會引入很多不必要的東西坛悉,而且很多語言的設(shè)計是不允許多繼承的,C# 就是單繼承的語言承绸,一個類只能有一個父類裸影。

繼承主要有三個作用:表示 is-a 關(guān)系,支持多態(tài)特性军熏,代碼復(fù)用轩猩。而這三個作用都可以通過組合、接口荡澎、委托三個技術(shù)手段來達(dá)成均践。除此之外,利用組合還能解決層次過深摩幔、過復(fù)雜的繼承關(guān)系影響代碼可維護(hù)性的問題彤委,所以很多情況下組合是比繼承更好一些的。

王爭在設(shè)計模式專欄中總結(jié)了一些設(shè)計模式和設(shè)計原則的一些知識點(diǎn)热鞍,分享一下葫慎,可以作為學(xué)習(xí)設(shè)計模式的參考:

image

Reference

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市薇宠,隨后出現(xiàn)的幾起案子偷办,更是在濱河造成了極大的恐慌,老刑警劉巖澄港,帶你破解...
    沈念sama閱讀 217,734評論 6 505
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件椒涯,死亡現(xiàn)場離奇詭異,居然都是意外死亡回梧,警方通過查閱死者的電腦和手機(jī)废岂,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,931評論 3 394
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來狱意,“玉大人湖苞,你說我怎么就攤上這事∠甓冢” “怎么了财骨?”我有些...
    開封第一講書人閱讀 164,133評論 0 354
  • 文/不壞的土叔 我叫張陵,是天一觀的道長藏姐。 經(jīng)常有香客問我隆箩,道長,這世上最難降的妖魔是什么羔杨? 我笑而不...
    開封第一講書人閱讀 58,532評論 1 293
  • 正文 為了忘掉前任捌臊,我火速辦了婚禮,結(jié)果婚禮上兜材,老公的妹妹穿的比我還像新娘理澎。我一直安慰自己逞力,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,585評論 6 392
  • 文/花漫 我一把揭開白布矾端。 她就那樣靜靜地躺著掏击,像睡著了一般。 火紅的嫁衣襯著肌膚如雪秩铆。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,462評論 1 302
  • 那天灯变,我揣著相機(jī)與錄音殴玛,去河邊找鬼。 笑死添祸,一個胖子當(dāng)著我的面吹牛滚粟,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播刃泌,決...
    沈念sama閱讀 40,262評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼凡壤,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了耙替?” 一聲冷哼從身側(cè)響起亚侠,我...
    開封第一講書人閱讀 39,153評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎俗扇,沒想到半個月后硝烂,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,587評論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡铜幽,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,792評論 3 336
  • 正文 我和宋清朗相戀三年滞谢,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片除抛。...
    茶點(diǎn)故事閱讀 39,919評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡狮杨,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出到忽,到底是詐尸還是另有隱情橄教,我是刑警寧澤,帶...
    沈念sama閱讀 35,635評論 5 345
  • 正文 年R本政府宣布绘趋,位于F島的核電站颤陶,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏陷遮。R本人自食惡果不足惜滓走,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,237評論 3 329
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望帽馋。 院中可真熱鬧搅方,春花似錦比吭、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,855評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至涛漂,卻和暖如春赏表,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背匈仗。 一陣腳步聲響...
    開封第一講書人閱讀 32,983評論 1 269
  • 我被黑心中介騙來泰國打工瓢剿, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人悠轩。 一個月前我還...
    沈念sama閱讀 48,048評論 3 370
  • 正文 我出身青樓间狂,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,864評論 2 354