設計模式:提供了一種普遍的可重用的方式來解決咱們平常編程中經常碰見的問題。設計模式並不必定就是一個類庫或者第三方框架,它們更多的表現爲一種思想而且普遍地應用在系統中。它們也表現爲一種模式或者模板,能夠在多個不一樣的場景下用於解決問題。設計模式能夠用於加速開發,而且將不少大的想法或者設計以一種簡單地方式實現。固然,雖然設計模式在開發中頗有做用,可是千萬要避免在不適當的場景誤用它們。html
根據目的和範圍,設計模式能夠分爲五類。
按照目的分爲:建立設計模式,結構設計模式,以及行爲設計模式。
按照範圍分爲:類的設計模式,以及對象設計模式。算法
1. 按照目的分,目前常見的設計模式主要有23種,根據使用目標的不一樣能夠分爲如下三大類:編程
建立設計模式(Creational Patterns)(5種):用於建立對象時的設計模式。更具體一點,初始化對象流程的設計模式。當程序日益複雜時,須要更加靈活地建立對象,同時減小建立時的依賴。而建立設計模式就是解決此問題的一類設計模式。設計模式
結構設計模式(Structural Patterns)(7種):用於繼承和接口時的設計模式。結構設計模式用於新類的函數方法設計,減小沒必要要的類定義,減小代碼的冗餘。框架
行爲模式(Behavioral Patterns)(11種):用於方法實現以及對應算法的設計模式,同時也是最複雜的設計模式。行爲設計模式不單單用於定義類的函數行爲,同時也用於不一樣類之間的協議、通訊。函數
2.按照範圍分爲:類的設計模式,以及對象設計模式ui
類的設計模式(Class patterns):用於類的具體實現的設計模式。包含了如何設計和定義類,以及父類和子類的設計模式。spa
對象設計模式(Object patterns): 用於對象的設計模式。與類的設計模式不一樣,對象設計模式主要用於運行期對象的狀態改變、動態行爲變動等。設計
- 開放封閉原則:一個軟件實體如類、模塊和函數應該對擴展開放,對修改關閉。
- 里氏替換原則:全部引用基類的地方必須能透明地使用其子類的對象.
- 依賴倒置原則:高層模塊不該該依賴低層模塊,兩者都應該依賴其抽象;抽象不該該依賴細節;細節應該依賴抽象。
- 單一職責原則:不要存在多於一個致使類變動的緣由。通俗的說,即一個類只負責一項職責。
- 接口隔離原則:客戶端不該該依賴它不須要的接口;一個類對另外一個類的依賴應該創建在最小的接口上。
- 迪米特法則:一個對象應該對其餘對象保持最少的瞭解。