行為型模式,設計到演算法和對象間的職責分配,不僅描述對象或類的模式,還描述它們之間的通訊方式,刻畫了運行時難以跟蹤的複雜的控制流程,它們將你的注意力從控制流程轉移到對象間的關係上來。
常見行為型模式有11種,分別如下:
1、行為型類模式採用繼承機制在類間分配行為:
a、模板方法模式(TemplateMethod)
模板方法模式:定義一個操作中的演算法的骨架,而將一些步驟延遲到子類中。模板方法使得子類可以不改變一個演算法的結構即可重定義該演算法的某些特定步驟。
結構圖:
執行個體:考題抄錯會做也是白搭
解釋:模板方法模式由一個抽象類別組成,這個抽象類別定義了需要覆蓋的可能有不同實現的模板方法,每個自從這個抽象類別派生的具體類將為此模板實現新方法。實現代碼重用。
b、解譯器模式(interpreter)
解譯器模式:給定一個語言,定義它的文法的一種表示,並定義一個解譯器,這個解譯器使用該表示來解釋語言中的句子。
結構圖:
執行個體:其實你不懂老闆的心
解釋:如果一種特定類型的問題發生的頻率足夠高,那麼就可以考慮將該問題的各個執行個體表述為一個簡單語言中的句子。也就是說,通過構建一個解譯器,該解譯器解釋這些句子來解決問題。
2、行為對象模式,使用對象複合而不是繼承,描述了一組相互對等的對象如何相互協作以完成其中任何一個對象都單獨無法完成的任何。
a、中介者模式(Mediator)
中介者模式:用一個中介對象來封裝一系列的對象互動。中介者使各對象不需要顯式地相互引用,從而使其耦合鬆散,而且可以獨立地改變它們之間的互動。
結構圖:
執行個體:世界需要和平
解釋:將集體行為封裝一個單獨的中介者對象來避免這個問題,中介者負責控制和協調一組對象間的互動。中介者充當一個中介以使組中的對象不再相互顯示引用。這些對象僅知道中介者,從而減少了相互串連的數目。
b、職責鏈模式(Chain of Responsibility)
職責鏈模式:使多個對象都有機會處理請求,從而避免請求的寄件者和接收者之間的耦合關係。將這個對象連成一條鏈,並沿著這條鏈傳遞該請求,直到有一個對象處理它為止。
結構圖:
執行個體:加薪非要老總批
解釋:我們有時候會碰到這種情況,就是有多個對象可以處理一個請求,哪個對象處理該請求事先並不知道,要在運行時刻自動確定,此時,最好的辦法就是讓請求寄件者與具體處理者分離,讓客戶在不明確指定接收者的情況下,提交一個請求,然後由所有能處理這請求的對象連成一條鏈,並沿著這條鏈傳遞該請求,直到有一個對象處理它為止。
c、策略模式(Strategy)
策略模式:定義了演算法家族,分別封裝起來,讓它們之間可以相互替換,此模式讓演算法的變化,不會影響到使用演算法的客戶。
結構圖:
執行個體:商場收銀軟體
解釋:繼承提供了一種支援多種演算法或行為的方法,我們可以直接生產一個類A的子類B、C、D,從而給它以不同的行為。但這樣會將行為硬行編製到父類A當中,而將演算法的實現與類A的實現混合起來,從而使得類A難以理解、難以維護和難以擴充,而且還不能動態改變演算法。仔細分析會發現,它們之間的唯一差別是它們所使用的演算法或行為,將演算法封裝在獨立的策略Strategy類中使得你可以獨立於其類A改變它,使它易於切換、易於理解、易於擴充。顯然使用對象組合要優於類繼承。
3、行為對象模式常將行為封裝在一個對象中,並將請求指派給它
a、命令模式(Command)
命令模式:將一個請求封裝為一個對象,從而使你可用不同的請求對客戶進行參數化;對請求排隊或記錄請求日誌,以及支援可撤銷的操作。
結構圖:
執行個體:烤羊肉串引來的思考
解釋:將請求寄件者與具體實現者分離,即為將叫用作業的對象與指導如何?該操作的對象解耦,可以使我們在不同的時刻指定、排列和執行請求,支援取消/重做的操作。還可以記錄整個操作的日誌,支援事事務。
b、迭代器模式(Iterator)
迭代器模式:提供一種方法順序訪問一個彙總對象中各個元素,而又不暴露該對象的內部表示。
結構圖:
執行個體:想走?可以!先買票
解釋:迭代器模式的關鍵思想是將對列表的訪問和遍曆從列表對象中分離出來並放入一個迭代器對象中,迭代器類定義了一個訪問該列表元素的介面。迭代器對象負責跟蹤當前的元素,並且知道哪些元素已經遍曆過了。
c、備忘錄模式(Memento)
備忘錄模式:在不破壞封裝性的前提下,捕獲一個對象的內部狀態,並在該對象之外儲存這個狀態。這樣以後就可將該對象恢複到原先儲存的狀態。
結構圖:
執行個體:遊戲恢複以前的狀態值
解釋:使用備忘錄可以避免暴露一些只應由對象A管理卻又必須儲存在對象A之外的資訊。備忘錄模式把可能很複雜的對象A的內部資訊對其他對象屏蔽起來,從而保持了封裝邊界。
d、觀察者模式又叫發布-訂閱模式(Publish/Subscribe)
觀察者模式:定義了一種一對多的依賴關係,讓多個觀察者對象同時監聽某一個主題對象。這個主體對象在狀態發生變化時,會通知所有觀察者對象,使它們能夠自動更新自己。
結構圖:
執行個體:-老闆回來,我不知道
解釋:觀察者模式,重點在於解除了對象間的緊耦合關係,目標和觀察者不是緊密耦合的,他們可以屬於一個系統中的不同抽象層次,目標所知道的僅僅是它有一系列的觀察者,每個觀察者實現Observer的簡單介面,觀察者屬於哪一個具體類,目標是不知道的。
e、狀態模式(State)
狀態模式:當一個對象的內在狀態改變時允許改變其行為,這個對象看起來像是改變了其類。
結構圖:
執行個體:無盡加班何時休(上班狀態、下班狀態)
解釋:狀態模式提供了一個更好的辦法來組織與特定狀態相關的代碼,決定狀態轉移的邏輯不在單塊的if或switch中,而是分布在各個狀態子類之間,由於所有與狀態相關的代碼都存在於某個狀態子類中,所以通過定義新的子類可以很容易地增加新的狀態和轉換。
f、訪問者模式(Visitor)
訪問者模式:表示一個作用於某對象結構中的各元素的操作。它使你可以在不改變各元素的類的前提下定義作用於這些元素的新操作。
結構圖:
執行個體:男人和女人
解釋:訪問者增加具體的Element是困難的,但增加依賴於複雜物件結構的構件的操作就變得容易。僅需增加一個新的訪問者即可在一個對象結構上定義一個新的操作。
本文連結:http://blog.csdn.net/caozhangyingfei0109/article/details/8614478
本文作者:廊坊師範學院資訊技術提高班九期張薄