閑談設(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è)計模式
- 提升自己代碼質(zhì)量宋欺,告別寫被人吐槽的爛代碼
- 提高復(fù)雜代碼的設(shè)計和開發(fā)能力,設(shè)計出擴(kuò)展性良好胰伍,可維護(hù)性更強(qiáng)齿诞,可復(fù)用性更好的代碼
- 讓讀源碼、學(xué)框架事半功倍骂租,學(xué)會設(shè)計模式掌挚,在看框架源碼的時候會更好的理解框架中的一些功能設(shè)計
- 為你的職場發(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è)計模式大體上可分為三類:
-
創(chuàng)建型模式(Create)
-
結(jié)構(gòu)型模式(Structure)
-
行為型模式(Behavior)
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è)計模式的參考: