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

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

前言

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

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

設(shè)計原則

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

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

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

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

開閉原則(Open-Closed Principle)

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

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

里氏替換原則(Liskov Substitution Principle)

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

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

依賴倒置原則(Dependence Inversion Principle)

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

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

迪米特原則(Law Of Demeter)

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

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

接口隔離原則(Interface Segregation Principle)

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

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

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

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

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

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

創(chuàng)建型

工廠方法模式 (Factory Method)

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

image

抽象工廠模式 (Abstract Factory)

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

image

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

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

image

原型模式 (Prototype)

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

image

單例模式 (Singleton)

確保一個類只有一個實例,并提供對該實例的全局訪問。

image

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

外觀模式 (Facade)

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

image

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

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

image

代理模式 (Proxy)

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

image

組合模式 (Composite)

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

image

享元模式 (Flyweight)

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

image

裝飾模式 (Decorator)

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

image

橋模式 (Bridge)

將一個抽象與實現(xiàn)解耦,以便兩者可以獨立的變化。

image

行為型

中介者模式 (Mediator)

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

image

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

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

image

命令模式 (Command)

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

image

迭代器模式 (Iterator)

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

image

模板方法模式 (Template Method)

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

image

策略模式 (Strategy)

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

image

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

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

image

備忘錄模式 (Memento)

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

image

解釋器模式 (Interpreter)

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

image

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

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

image

訪問者模式 (Visitor)

封裝一些施加于某種數(shù)據(jù)結(jié)構(gòu)元素之上的操作。一旦這些操作需要修改,接受這個操作的數(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輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

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

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