## **設計模式分類**
軟件設計模式根據目的來分可以分為三大類、總共23種設計模式,實在是太多了,估計大部分得人也記不住更別說用了,以下整理了每個大類的一些常用的設計模式。
## **一. 創建型模式**
用于描述“怎樣創建對象”,它的主要特點是“將對象的創建與使用分離”
* **單例模式**(Singleton)
對象最多只能創建一個實例
* **工廠方法模式**(Factory Method)
創建父類公共接口(定義創建方式),而子類則負責生成具體的對象。
* **抽象工廠模式**(AbstractFactory)
提供一個創建產品族的接口,其每個子類可以生產一系列相關的產品
* **原型模式**(Prototype)
將一個對象作為原型,通過對其進行復制而克隆出多個和原型類似的新實例
* **建造者模式**(Builder)
將一個復雜對象分解成多個相對簡單的部分,然后根據不同需要分別創建它們,最后構建成該復雜對象
## **二. 結構型模式**
用于描述如何將類或對象按某種布局組成更大的結構
* **適配器模式**(Adapter)
將一個類的接口轉換成客戶希望的另外一個接口,主要用于解決接口兼容性問題。
* **裝飾器模式**(Decorator)
動態的給對象增加一些職責,擴展對象的功能。
* **代理模式**(Proxy)
提供一種間接訪問對象的方法,主要用于解決一些不想直接訪問對象的場景。
* **外觀模式**(Facade)
為多個復雜的子系統提供一個一致的接口,使這些子系統更加容易被訪問
## **三. 行為型模式**
用于描述類或對象之間怎樣相互協作共同完成單個對象都無法單獨完成的任務,以及怎樣分配職責
* **策略模式**(Strategy)
定義了一系列算法,并將每個算法封裝起來,使它們可以相互替換,且算法的改變不會影響使用算法的客戶
* **模板方法模式**(TemplateMethod)
定義一個操作中的算法骨架,而將算法的一些步驟延遲到子類中,使得子類可以不改變該算法結構的情況下重定義該算法的某些特定步驟
* **觀察者模式**(Observer)
多個對象間存在一對多關系,當一個對象發生改變時,把這種改變通知給其他多個對象,從而影響其他對象的行為
## **設計模式的六大原則**
* **單一職責原則**:實現類要職責單一
* **里氏替換原則**:不要破壞繼承體系,子類可以擴展父類的功能,但不能改變原有父類的功能
* **依賴倒置原則**:面向接口編程,而不依賴具體的實現
* **接口隔離原則**:設計接口要職責單一
* **迪米特原則**:降低耦合
* **開閉原則**:開放擴展,關閉修改