設計模式總共23個,可是經常使用的不到10個,下面就把這23個設計模式進行整理歸類,具體以下:算法
1)建立型模式,共五種:工廠方法模式、抽象工廠模式、單例模式、建造者模式、原型模式。設計模式
2)結構型模式,共七種:適配器模式、裝飾器模式、代理模式、外觀模式、橋接模式、組合模式、享元模式。spa
3)行爲型模式,共十一種:策略模式、模板方法模式、觀察者模式、迭代器模式、職責鏈模式、命令模式、備忘錄模式、狀態模式、訪問者模式、中介者模式、解釋器模式設計
1)策略模式:定義一系列的算法,把他們一個個封裝起來,而且可使他們可相互替換,使得算法可獨立於使用它的客戶而變化。代理
2)模板方法模式::定義一個操做中的算法的骨架,而將一些步驟延遲到子類中。模板方法使得子類能夠不改變一個算法的結構便可從新定義該算法的某些特定步驟。日誌
模板方法模式由一個抽象類組成,這個抽象類定義了須要須要覆蓋的可能有不一樣實現的面板方法,每一個從這個抽象類派生的具體類將爲此模板實現新的方法。orm
3)觀察者模式:定義了一種一對多的依賴關係,讓多個觀察者對象同時監聽某一個主題對象,這個主題對象在狀態發生變化時,會通知全部觀察者對象,是他們可以自動更新本身。(也叫作 發佈-訂閱模式)對象
4)迭代器模式:提供一種方法順序訪問一個聚合對象中各個元素,而又不暴露該對象的內部表示。接口
迭代模式的關鍵思想是將對列表的訪問和遍歷從列表對象中分離出來並放入一個迭代器對象中,迭代器類定義了一個訪問該列表元素的接口。迭代器對象負責跟蹤當前元素,而且知道哪些元素已經遍歷過了。原型
5)職責鏈模式:使多個對象都有機會處理請求,從而避免請求的發送者和接收者之間的耦合關係。將這個對象連成一條鏈,並沿着這條鏈傳遞該請求,直到有一個對象處理他爲止。
有多個對象能夠處理一個請求,哪一個對象處理該請求事先並不知道,要在運行時刻自動肯定,這個時候最好的方法就是讓請求發送者與具體處理者進行分離。讓客戶在不明確知道指定接收者的狀況下,提交一個請求,而後由全部能處理這請求的對象連成一條鏈,並沿着這條鏈傳遞該請求,直到有一個對象處理它爲止。
6)命令模式:將一個請求封裝爲一個對象,從而使你可用不一樣的請求對客戶進行參數化;對請求排隊或記錄請求日誌,以及支持可撤銷的操做。
將調用操做對象與知道如何實現該操做的對象解耦,能夠在不一樣時刻指定、排列和執行請求。