軟件修養(yǎng) -- 一篇搞定設(shè)計(jì)原則和 23 種設(shè)計(jì)模式

原文:https://makeoptim.com/training/typescript-design-patterns

前言

設(shè)計(jì)原則和設(shè)計(jì)模式是通用的知識(shí)點(diǎn),無論你使用什么語言,皆可閱讀,毫無阻礙

代碼倉庫:https://github.com/CatchZeng/typescript-design-patterns

設(shè)計(jì)原則

設(shè)計(jì)原則(Design Principles)指的是抽象性比較高、編程都應(yīng)該遵守的原則,對應(yīng)的設(shè)計(jì)模式(Design Pattens)是解決具體場景下特定問題的套路,這里要對兩個(gè)概念進(jìn)行區(qū)分。換句話說,設(shè)計(jì)模式要遵循設(shè)計(jì)原則。

單一職責(zé)原則(Single Responsibility Principle)

一個(gè)類只負(fù)責(zé)一項(xiàng)職責(zé)(只有一個(gè)發(fā)生變化的原因)

詳見軟件修養(yǎng) -- 單一職責(zé)原則

開閉原則(Open-Closed Principle)

擴(kuò)展開放,對修改封閉

詳見軟件修養(yǎng) -- 開閉原則

里氏替換原則(Liskov Substitution Principle)

基類適用的,子類一定適用(子類可以擴(kuò)展父類的功能,但不能改變父類原有的功能)

詳見軟件修養(yǎng) -- 里氏替換原則

依賴倒置原則(Dependence Inversion Principle)

依賴抽象,不要依賴具體(面向接口編程

詳見軟件修養(yǎng) -- 依賴倒置原則

迪米特原則(Law Of Demeter)

一個(gè)對象應(yīng)該對其他對象盡可能少的了解(最少知道

詳見軟件修養(yǎng) -- 迪米特法則

接口隔離原則(Interface Segregation Principle)

使用多個(gè)專門的接口,而不要使用一個(gè)單一的(大)接口(接口單一職責(zé)

詳見軟件修養(yǎng) -- 接口隔離原則

組合/聚合復(fù)用原則 (Composite/Aggregate Reuse Principle)

盡量使用組合/聚合,而不是繼承。

詳見軟件修養(yǎng) -- 組合/聚合復(fù)用原則

23 種常用設(shè)計(jì)模式

創(chuàng)建型

工廠方法模式 (Factory Method)

定義一個(gè)創(chuàng)建對象的接口,但讓實(shí)現(xiàn)這個(gè)接口的類來決定實(shí)例化哪個(gè)類。工廠方法讓類的實(shí)例化推遲到子類中進(jìn)行。

image

抽象工廠模式 (Abstract Factory)

為一個(gè)產(chǎn)品族提供了統(tǒng)一的創(chuàng)建接口。當(dāng)需要這個(gè)產(chǎn)品族的某一系列的時(shí)候,可以從抽象工廠中選出相應(yīng)的系列創(chuàng)建一個(gè)具體的工廠類,而無需指定它們的具體類。

image

創(chuàng)建者/生成器模式 (Builder)

將一個(gè)復(fù)雜對象構(gòu)建與它的表示分離,使得同樣的構(gòu)建過程可以創(chuàng)建不同的表示

image

原型模式 (Prototype)

用原型實(shí)例指定創(chuàng)建對象的種類,并且通過拷貝這些原型,創(chuàng)建新的對象。

image

單例模式 (Singleton)

確保一個(gè)類只有一個(gè)實(shí)例,并提供對該實(shí)例的全局訪問。

image

結(jié)構(gòu)型

外觀模式 (Facade)

為子系統(tǒng)中的一組接口提供一個(gè)一致的界面,外觀模式定義了一個(gè)高層接口,這個(gè)接口使得這一子系統(tǒng)更加容易使用

image

適配器模式 (Adapter/Wrapper/Translator)

將某個(gè)類的接口轉(zhuǎn)換成客戶端期望的另一個(gè)接口表示。適配器模式可以消除由于接口不匹配所造成的類兼容性問題。

image

代理模式 (Proxy)

為其他對象提供一個(gè)代理控制對這個(gè)對象的訪問。

image

組合模式 (Composite)

把多個(gè)對象組成樹狀結(jié)構(gòu)來表示局部整體,這樣用戶可以一樣的對待單個(gè)對象和對象的組合。

image

享元模式 (Flyweight)

通過共享以便有效的支持大量小顆粒對象。

image

裝飾模式 (Decorator)

向某個(gè)對象動(dòng)態(tài)地添加更多的功能。修飾模式是除類繼承外另一種擴(kuò)展功能的方法。

image

橋模式 (Bridge)

將一個(gè)抽象與實(shí)現(xiàn)解耦,以便兩者可以獨(dú)立的變化

image

行為型

中介者模式 (Mediator)

包裝了一系列對象相互作用的方式,使得這些對象不必相互明顯作用,從而使它們可以松散偶合。當(dāng)某些對象之間的作用發(fā)生改變時(shí),不會(huì)立即影響其他的一些對象之間的作用,保證這些作用可以彼此獨(dú)立的變化。

image

觀察者模式 (Observer or Publish/subscribe)

在對象間定義一個(gè)一對多的聯(lián)系性,由此當(dāng)一個(gè)對象改變了狀態(tài),所有其他相關(guān)的對象會(huì)被通知并且自動(dòng)刷新。

image

命令模式 (Command)

將一個(gè)請求封裝為一個(gè)對象,從而使你可用不同的請求對客戶進(jìn)行參數(shù)化;對請求排隊(duì)或記錄請求日志,以及支持可取消的操作。

image

迭代器模式 (Iterator)

提供一種方法順序訪問一個(gè)聚合對象各個(gè)元素, 而又不需暴露該對象的內(nèi)部表示。

image

模板方法模式 (Template Method)

模板方法模式準(zhǔn)備一個(gè)抽象類,將部分邏輯具體方法具體構(gòu)造子類的形式實(shí)現(xiàn),然后聲明一些抽象方法來迫使子類實(shí)現(xiàn)剩余的邏輯。不同的子類可以以不同的方式實(shí)現(xiàn)這些抽象方法,從而對剩余的邏輯有不同的實(shí)現(xiàn)。先構(gòu)建一個(gè)頂級(jí)邏輯框架,而將邏輯的細(xì)節(jié)留給具體的子類去實(shí)現(xiàn)。

image

策略模式 (Strategy)

定義一個(gè)算法的系列,將其各個(gè)分裝,并且使他們有交互性。策略模式使得算法在用戶使用的時(shí)候能獨(dú)立的改變

image

狀態(tài)模式 (State)

讓一個(gè)對象在其內(nèi)部狀態(tài)改變的時(shí)候,其行為也隨之改變。狀態(tài)模式需要對每一個(gè)系統(tǒng)可能獲取的狀態(tài)創(chuàng)立一個(gè)狀態(tài)類的子類。當(dāng)系統(tǒng)的狀態(tài)變化時(shí),系統(tǒng)便改變所選的子類。

image

備忘錄模式 (Memento)

備忘錄對象是一個(gè)用來存儲(chǔ)另外一個(gè)對象內(nèi)部狀態(tài)的快照的對象。備忘錄模式的用意是在不破壞封裝的條件下,將一個(gè)對象的狀態(tài)捉住,并外部化存儲(chǔ)起來,從而可以在將來合適的時(shí)候把這個(gè)對象還原到存儲(chǔ)起來的狀態(tài)。

image

解釋器模式 (Interpreter)

給定一個(gè)語言, 定義它的文法的一種表示,并定義一個(gè)解釋器, 該解釋器使用該表示來解釋語言中的句子。

image

職責(zé)鏈模式 (Chain of Responsibility)

為解除請求的發(fā)送者接收者之間耦合,而使多個(gè)對象都有機(jī)會(huì)處理這個(gè)請求。將這些對象連成一條鏈,并沿著這條鏈傳遞該請求,直到有一個(gè)對象處理它

image

訪問者模式 (Visitor)

封裝一些施加于某種數(shù)據(jù)結(jié)構(gòu)元素之上的操作。一旦這些操作需要修改,接受這個(gè)操作的數(shù)據(jù)結(jié)構(gòu)可以保持不變。訪問者模式適用于數(shù)據(jù)結(jié)構(gòu)相對未定的系統(tǒng),它把數(shù)據(jù)結(jié)構(gòu)作用于結(jié)構(gòu)上的操作之間的耦合解脫開,使得操作集合可以相對自由的演化。

image

參考鏈接

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容