最近一直在看設計模式,GOF23種設計模式反覆理解中,設計模式確實對面向對象編程有很大幫助!html
1)瞭解UML類圖中泛化、實現、依賴、關聯、聚合、組合關係算法
2)每種設計模式的特色和概念是什麼,它解決了一個什麼樣的問題、它的優缺點是什麼!每一個設計模式,至少能舉出一個場景,可加深記憶。編程
3)瞭解面向對象編程的三特性、七原則和六視點設計模式
最終目標:說出一種設計模式就能知道是解決了一個什麼樣的問題,他的業務模型(類圖)是怎樣的,根據業務模型,可直接實現編碼。post
特色、概念、類圖、場景舉例、程序實現。這五個環節下來基本對設計模式能夠有較深入的理解。編碼
設計模式按類型可分爲三種:建立型、結構型和行爲性。spa
建立型:設計
(1)單例:只需一個實例時考慮。
(2)工廠方法:通常先用工廠方法解決對象建立問題。
(3)抽象工廠:當工廠方法沒法知足多系列問題時,再重構爲抽象工廠。
(4)建造者:多個部件的建造實現相同,只是所需部件、建造順序不一樣時考慮。
(5)原型:在初始化信息不發生變化時考慮。代理
結構型:htm
(1)適配器:讓接口不相容的類能協同工做。(亡羊補牢)
(2)裝飾:動態增長單個對象的額外職責,比生成子類更靈活。
(3)橋接:使繼承關係更改成組合關係,使二者可獨立變化。(未雨綢繆)
(4)組合:用樹狀結構表示「總體-部分」的層次關係,使單個對象(葉節點)與組合對象(枝節點)的使用具備一致性。
(5)享元:爲運用共享技術,支持大量細粒度對象,節省開銷。
(6)代理:控制對單個對象的訪問。
(7)外觀:子系統的高層接口,避免兩個類直接關係的第三者。
行爲型:
(1)觀察者:一對多依賴關係,一端變化、多端獲得通知並自動更新。(目標與觀察者可實現弱耦合)
(2)模板方法:繼承+重寫解決代碼重複問題。
(3)命令:將請求發送者與具體實現者解耦,可對請求排列、取消、重作,支持事務。(多請求,單處理)
(4)職責鏈:將處理者排成鏈,沿鏈傳遞請求。(單請求,多處理)
(5)狀態:當對象內狀態改變而執行不一樣操做時考慮,狀態轉移邏輯不在if/switch中,而在各子類之間,增/改狀態和狀態轉換較容易。
(6)解釋器:若某特定問題發生的頻率足夠高時考慮,需定義文法表示與解釋器自己。
(7)中介者:由中介封裝一系列對象交互,減小對象間耦合,利於複用。(朋友多)
(8)訪問者:當Element較穩定、Visitor易增長時考慮。(朋友在精不在多)
(9)策略:將一系列算法逐個封裝並可相互替換,易於切換、理解、擴展。
(10)備忘錄:不破壞封裝,又要取該對象內狀態,且要求狀態還原時考慮。(保持封裝邊界)
(11)迭代器:將對集合的訪問與遍歷從集合對象中分離出來到迭代器中。