設計模式學習心得
《設計模式:可復用面向對象軟件的基礎》一書以更貼近讀者思維的角度描述了GOF的23個設計模式。按照書中介紹的每個設計模式的內容,結合網上搜集的資料,我將對設計模式的學習心得總結出來。網絡上關於設計模式的資料和文章汗牛充棟,有些文章對設計模式介紹生動形象。但是我相信“一千個讀者,一千個哈姆雷特”,因此我還是將自己學習設計模式的心得組織起來,形成我自己的理解與博友們分享。雖然我不能保證自己的文字有多么生動容易理解,但是還是希望自己的博文能接近更容易理解的方式方便大家學習。
每個模式都按照模式的意圖、應用、結構、心得體會、舉例以及參考的文章資料內容進行組織。由於模式個數較多,展現在一篇博文內並不合適,因此對GOF的23個設計模式按照傳統的創建型模式、結構型模式、行為型模式的分類。並以列表形式給出,附帶博文鏈接如下:
創建型模式:
提供一個創建一系列相關或相互依賴對象的接口,而無須指定他們具體的類。
將一個對象的構建和它的表示分離,使得同樣的構建過程可以創建不同的表示。
定義一個用於創建對象的接口,讓子類決定實例化哪一個類,使一個類的實力化延遲到子類。
用原型實例制定創建對象的種類,並且通過拷貝這些原型創建新的對象。
保證一個類只有一個實例,並提供一個訪問它的全局訪問點。
結構型模式:
將類的一個接口轉換成用戶希望的另一個接口,使得原本由於接口不兼容而不能一起工作的類可以一起工作。
將抽象部分與它的實現部分分離,使他們都可以獨立的變化。
將對象組合成樹形結構以表示“部分-整體”的層次結構,使得用戶對單個對象和組合對象的使用具有一致性。
動態的給一個對象添加一些額外的職責,就增加功能來說,比生成子類更為靈活。
外觀(Facade):
為子系統中的一組接口提供一個一致的界面,它定義了一個高層接口,使得這一子系統更加容易使用。
享元(Flyweight):
運用共享技術有效的大量細粒度的對象。
代理(Proxy):
為其他對象提供一種代理控制對這個對象的訪問。
行為型模式:
責任鏈(Chain Of Resposibility):
使多個對象都有機會處理請求,從而避免請求的發送者和接受者之間的耦合關系。將這些對象鏈成一條鏈,並沿着這條鏈傳遞該請求,直到有一個對象處理它為止。
將一個請求封裝為一個對象,從而可用不同的請求對客戶參數化。對請求排隊或記錄請求日志,以及支持可撤消的操作。
解釋器(Interpreter):
給定一個語言,定義它的文法的一種表示,並定義一個解釋器,解釋器使用該表示解釋語言的句子。
提供一種方法順序訪問一個聚合對象中的每個元素,而又不想暴露該對象的內部表示。
中介者(Mediator):
用一個中介對象來封裝一系列對象的交互。中介者使得各對象不需要顯式的相互引用,而是使其耦合松散,而且可以獨立地改變它們的交互。
備忘錄(Memento):
在不破壞封裝性的前提下,捕獲一個對象的狀態,並在該對象之外保存這個狀態,這樣以后就可以將對象恢復到原先保存的狀態。
觀察者(Oberver):
定義對象間的一種一對多的依賴關系,當一個對象的狀態發生改變時,所有依賴於它的對象都得到通知並被自動更新。
狀態(State):
允許一個對象在其內部狀態改變時改變它的行為,對象看起來修改了它的類。
定義一系列算法,把他們封裝起來,並且使他們可以相互替換,使算法可以獨立於使用它的客戶而變化。
模板方法(Template Methed):
定義一個操作中的算法骨架,而將一些步驟延遲到子類,使得子類可以不改變一個算法的結構就可以重定義該算法的某些步驟。
表示一個作用於某對象結構中的各元素的操作,它使你在不改變各元素的類的前提下定義作用於這些元素的新操作。
當然,作者也是首次系統的認真學習這些經典的設計模式,因此某些觀點和描述或有瑕疵,希望能得到讀者們的理解。我只把自己覺得大家公認的觀點以及自己的心得和體會描述出來,不足之處還希望高手們不吝賜教,希望與大家共同進步,一起學習這些經典的知識。