設計模式是面向對象技術的最新進展之一。設計模式是可以複用的設計方案,我們可以站在巨人肩膀上,無需爲重複出現的問題再次設計解決方案。 設計模式有利於提高我們的思考層次,需要我們不斷的認真學習。
每個設計模式的特點是他們分類的依據。如下圖是我個人的理解,若有不同,望指出!
創建型:
抽象工廠:一系列 接口 具體類 創建一系列接口;多個類型產品、
臃腫
建造者: 構建 表示 構建過程和表示過程分離,使得相同的構建可以創建不同表示的實例。
工廠:接口 創建接口
原型:copy 通過複製創建一個新的實例
單例:只創建一個實例
共同特點:接口 創建什麼、怎麼創建
結構型:
適配器:轉換接口
開封
協同
橋接:抽象 實現 變化
聚合代替繼承
解耦不同變化 找出變化並封裝
組合:部分-整體
裝飾:爲一個對象動態添加職責
動態、透明的方式給單個對象添加職責
外觀:一組接口——高層接口
信息的隱藏
享元:共享
代理:代理 對這個對象的訪問
行爲型:
觀察者:1:n
定義了一種一對多的依賴關係,讓多個觀察者對象同時監聽某一個主題對象。這個主題對象在狀態發生變化時,會通知所有觀察者對象,是他們能夠自動更新自己。
特點:1:n=1個通知者:n個觀察者;通知者狀態發生變化,觀察者的行爲更新。
模板:定義一個操作中的算法的骨架,而將一些步驟延遲到子類中。模板方法使得子類可以不改變一個算法的結構即可重定義該算法的某些特定步驟。
特點:抽象 繼承
命令:將一個請求封裝爲一個對象,從而使你可用不同的請求對客戶進行參數化;對請求排隊或記錄請求日誌,以及支持可撤銷的操作。
特點:多建立類
狀態:當一個對象的內在狀態改變時允許改變其行爲,這個對象看起來像是改變了其類。
特點:狀態改變,行爲改變。
職責鏈:使多個對象都有機會處理請求,從而避免請求的發送者和接收者的耦合關係。將這個對象連成一條鏈,並沿着這條鏈傳遞該請求,直到有一個對象處理它爲止。
特點:1:n=1個請求:n個處理者
解釋器:給定一種語言,定義它的文法的一種表示,並定義一個解釋器,這個解釋器使用該表示來解釋語言中的句子。
特點:解釋
中介者:用一箇中介對象來封裝一系列的對象交互。中介者使各個對象不需要顯示地相互引用,從而使其耦合鬆散,而且可以獨立地改變它們之間的交互。
特點:中介 不之間發生關係
訪問者:表示一個作用於某對象結構中的各元素的操作。它使你可以在不改變各元素的類的前提下定義作用於這些元素的新操作。
特點:新操作
策略:它定義了算法家族,分別封裝起來,讓它們之間可以互相替換,此模式讓算法的變化,不會影響到使用算法的客戶。
特點:封裝算法。
備忘錄:在不破壞封裝性的前提下,捕獲一個對象的內部狀態,並在該對象之外保存這個狀態。這樣以後,就可將該對象恢復到原先保存的狀態。
特點: 保存狀態
迭代器:提供一種方法順序訪問一個聚合對象中各個元素,而又不暴露該對象的內部表示。
特點:遍歷
六大原則:
設計程序堅持這六大原則,有利於程序的維護、複用、擴展,增強其靈活性。
感受:讀着第29章對設計模式的總結,知道什麼叫做皮毛!雖然,已經學習設計模式一個月了,但是,也僅僅是理解了一個皮毛,僅僅是理解了一些代碼,機械的懂得了設計模式的優缺點,什麼時候使用!對其真正的思想精華,吸收的不是很多,還有待進一步大空間的進步。
設計模式的特點可能就是這樣,當初看培養計劃時,上面也是說,設計模式需要反覆學習,一次學透是不可能的。這次,我對設計模式的學習也還算認真,設計模式有23個,學習過程中,難免有情緒起伏,故有些設計模式學習的不錯,有些就真的是皮毛,模模糊糊了,甚至連他們的故事都想不起來。若猛地問我一個設計模式的話,我需要認真想纔可以想起來,有時,還可能混。
我計劃,這次先簡單總結一下,主要目的是瞭解自己情況。設計模式我還需要對其進行長久學習。