如題,實際上,我想這是很困難的。算法
除非——只是爲了給本身作一個提醒,可以看一眼就快速回想起該設計模式的種種記憶。設計模式
下列是我以前在學習《大話設計模式》時作的筆記總結,當中有部分措辭來自其做者程傑。(很是感謝他爲神祕的設計模式搭建瞭如此平滑的學習通道)學習
1. 建立型:設計
(1)單例:只需一個實例時考慮。代理
(2)工廠方法:通常先用工廠方法解決對象建立問題。對象
(3)抽象工廠:當工廠方法沒法知足多系列問題時,再重構爲抽象工廠。繼承
(4)建造者:多個部件的建造實現相同,只是所需部件、建造順序不一樣時考慮。接口
(5)原型:在初始化信息不發生變化時考慮。事務
2. 結構型:原型
(1)適配器:讓接口不相容的類能協同工做。(亡羊補牢)
(2)裝飾:動態增長單個對象的額外職責,比生成子類更靈活。
(3)橋接:使繼承關係更改成組合關係,使二者可獨立變化。(未雨綢繆)
(4)組合:用樹狀結構表示「總體-部分」的層次關係,使單個對象(葉節點)與組合對象(枝節點)的使用具備一致性。
(5)享元:爲運用共享技術,支持大量細粒度對象,節省開銷。
(6)代理:控制對單個對象的訪問。
(7)外觀:子系統的高層接口,避免兩個類直接關係的第三者。
3. 行爲型:
(1)觀察者:一對多依賴關係,一端變化、多端獲得通知並自動更新。(目標與觀察者可實現弱耦合)
(2)模板方法:繼承+重寫解決代碼重複問題。
(3)命令:將請求發送者與具體實現者解耦,可對請求排列、取消、重作,支持事務。(多請求,單處理)
(4)職責鏈:將處理者排成鏈,沿鏈傳遞請求。(單請求,多處理)
(5)狀態:當對象內狀態改變而執行不一樣操做時考慮,狀態轉移邏輯不在if/switch中,而在各子類之間,增/改狀態和狀態轉換較容易。
(6)解釋器:若某特定問題發生的頻率足夠高時考慮,需定義文法表示與解釋器自己。
(7)中介者:由中介封裝一系列對象交互,減小對象間耦合,利於複用。(朋友多)
(8)訪問者:當Element較穩定、Visitor易增長時考慮。(朋友在精不在多)
(9)策略:將一系列算法逐個封裝並可相互替換,易於切換、理解、擴展。
(10)備忘錄:不破壞封裝,又要取該對象內狀態,且要求狀態還原時考慮。(保持封裝邊界)
(11)迭代器:將對集合的訪問與遍歷從集合對象中分離出來到迭代器中。