原文: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ā)生變化的原因)
開閉原則(Open-Closed Principle)
對擴(kuò)展開放,對修改封閉
里氏替換原則(Liskov Substitution Principle)
基類適用的,子類一定適用(子類可以擴(kuò)展父類的功能,但不能改變父類原有的功能)
依賴倒置原則(Dependence Inversion Principle)
依賴抽象,不要依賴具體(面向接口編程)
迪米特原則(Law Of Demeter)
一個對象應(yīng)該對其他對象盡可能少的了解(最少知道)
接口隔離原則(Interface Segregation Principle)
使用多個專門的接口,而不要使用一個單一的(大)接口(接口單一職責(zé))
組合/聚合復(fù)用原則 (Composite/Aggregate Reuse Principle)
盡量使用組合/聚合,而不是繼承。
23 種常用設(shè)計模式
創(chuàng)建型
工廠方法模式 (Factory Method)
定義一個創(chuàng)建對象的接口,但讓實現(xiàn)這個接口的類來決定實例化哪個類。工廠方法讓類的實例化推遲到子類中進(jìn)行。

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

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

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

單例模式 (Singleton)
確保一個類只有一個實例,并提供對該實例的全局訪問。

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

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

代理模式 (Proxy)
為其他對象提供一個代理以控制對這個對象的訪問。

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

享元模式 (Flyweight)
通過共享以便有效的支持大量小顆粒對象。

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

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

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

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

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

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

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

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

狀態(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)便改變所選的子類。

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

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

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

訪問者模式 (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)上的操作之間的耦合解脫開,使得操作集合可以相對自由的演化。
