標籤:設計模式 對象 設計 類 物件導向
上篇部落格給大家介紹了六大原則和設計模式之間的關係,以及建立型模式和結構型模式
(http://blog.csdn.net/zhangzijiejiayou/article/details/32712779)。本文將給大家介紹行為型模式。
行為型模式
是對在不同的對象之間劃分職責和演算法的抽象化。
觀察者模式:定義對象間的一種一對多的依賴關係,當一個對象的狀態發生改變時,所有依賴於它的對象都得到
通知並被自動更新。
優點:在解耦合,讓耦合的雙方都依賴於抽象的介面而不是具體,從而使各自的變化都不會影響另一邊的變化。
依賴倒轉原則的最佳體現。
缺點:抽象觀察者的介面的任務過於繁重。運用時要把握好這個尺度。
模板方法:定義一個操作演算法骨架,而將一些步驟延遲到子類中,模板方法使得子類可以不改變一個演算法的結構
即可重新定義該演算法的某些特定步驟。
優點:提供了一個很好的代碼複用的平台。很好地體現了開放封閉原則和裡氏代換原則。
缺點:演算法骨架不容易升級
模板方法可以用橋接模式類比實現
命令模式:將一個請求封裝為一個對象,從而使你可用不同的的請求對客戶進行參數化;可以對請求排隊或記錄
請求日誌,以及支援可撤銷的操作。
優點:將叫用作業的對象和知道如何?該操作的對象解耦
缺點:用來執行操作的介面的任務比較繁重。
狀態模式:允許一個對象在其內部狀態改變時改變它的行為,讓對象看起來似乎修改了它的類。
優點:與特定狀態相關的行為局部化,並且將不同狀態的行為分割開來,狀態模式通過把各種狀態轉移邏輯分布
到State的子類之間,來減少相互間的依賴
狀態模式和策略模式在模式結構圖上基本上是一樣的
職責鏈模式:使多個對象都有機會處理請求,從而避免請求的寄件者和接收者之間的耦合關係。將這個對象連成
一條鏈,並沿著這條鏈傳遞該請求,直到有一個對象處理它為止。
優點:接收者和寄件者都沒有對方明確的訊息,且鏈中的對象自己也並不知道鏈的結構。降低了耦合度。
缺點:一個請求極有可能到了鏈的末端都得不到處理,或者因為沒有正確配置而得不到處理。
職責鏈和命令模式都可以將請求的寄件者和接收站之間解耦合,但執行方式不同。
解譯器模式:給定一個語言,定義它的文法的一種表示,並定義一個解譯器,這個解譯器使該表示來解釋語言中
的句子。
優點:容易改變和擴充文法,因為該模式使用類來表示文法法則,可以使用繼承來改變或擴充文法。也比較容易
實現文法,因為定義抽象文法樹中各個節點的類的實現大題類似,這些類都易於直接編寫。
缺點:包含許多規則的文法可能難以管理和維護。建議當文法非常複雜時,使用其他的技術如文法剖析器或編
譯產生器來處理。
中介者模式:用一個中介對象來封裝一系列的對象互動。中介者使各個對象不需要顯示地相互引用,從而使其耦
合鬆散,而且可以獨立地改變他們之間的互動。
優點:降低了類之間的耦合,關注的對象從對象各自本身的行為轉移到它們之間的互動上來,也就是站在一個更
宏觀的角度去看待系統。
缺點:互動複雜性變為中介者的複雜性
訪問者模式:表示一個作用於某對象結構中的各元素的操作。它使你可以再不改變各元素的類的前提下定義作用
於這些元素的新操作。
優點:資料結構和作用於結構上的操作之間的耦合度降低
缺點:增加新的資料結構變得困難。
策略模式:定義一系列的演算法,把它們一個個封裝起來,並且使它們可以相互替換。本模式使得演算法可獨立於使
用它的客戶變化。
優點:定義了一系列的可重用的演算法或行為,繼承有助於析取這些演算法中的公用功能。簡化了單元測試。
缺點:並沒有解除用戶端需要需要判斷的壓力。
策略模式和簡單原廠模式結合可以大大減輕用戶端的職責。
橋接模式和策略模式
相同:某些情況下,可以使用橋接模式來類比實現策略模式的功能。
不同:最主要的是模式的目的不一樣,策略模式的目的是封裝一系列的演算法,使得這些演算法可以相互替換;而橋
接模式的目的是分離抽象部分和實現部分,使得它們可以獨立地變化。
備忘錄模式:在不破壞封裝性的前提下,捕獲一個對象的內部狀態,並在該對象之外儲存這個狀態。這樣可將該
對象恢複到原先儲存的狀態。
優點:可將該對象恢複到原先儲存的狀態。
缺點:如果狀態資料很大很多,會非常消耗記憶體
命令模式和備忘錄模式結合可以使用備忘錄模式來儲存可撤銷操作的狀態。
迭代器模式:提供一種方法順序訪問一個彙總對象中各個元素,而又不需暴露該對象的內部表示。
優點:為遍曆不同的聚集結構提供如開始、下一個、是否結束、當前那一項等統一介面。分離了集合對象的遍曆
行為,抽象出一個迭代器類來負責,這樣既可以不暴露集合內部結構,又可讓外部代碼透明地訪問集合內部的資料。
個人小結:
只要真正深入地理解了設計原則,很多設計其實就是原則的而已,或許在不知不覺中就在使用設計模式了。亦或
我們可以再根據設計模式的基本原則設計出更好的更實用的模式來。就像《倚天屠龍記》中張無忌練習武當派武功的
最高境界就是“全忘記”,其實設計模式的最高境界也是這樣,應用於無形當中。