設計模式學習 行為型模式

2021-10-04 23:37:19 字數 2361 閱讀 8185

行為型模式包含以下種類:

策略模式、模板方法模式、狀態模式、觀察者模式、備忘錄模式、中介者模式、命令模式、訪問者模式、責任鏈模式、迭代器模式、直譯器模式……學習中

1、策略模式(strategy)

通過組合的方式實現策略,context環境類中儲存乙個策略類的指標,通過設計多個具體策略類來實現演算法。

缺點:可能會導致具體的策略類過多。

2、模板方法模式(template)

演算法框架在基類中實現,演算法細節在繼承類中實現;達到框架和細節的分離

缺點:如果有多個演算法框架都想要實現同樣的演算法細節,需要多個繼承結構。

3、狀態模式(state)

狀態模式,將所有的狀態都設計為具體類,context中儲存state的指標,具體的state中也可以呼叫context中改變當前狀態(將state設定為context 的友元類)

如tcp的建立、監聽、關閉幾個state

4、觀察者模式(observer)

在subject中儲存乙個具體observer指標的列表,當subject變化的時候,通過notify呼叫具體observer的response函式,實現乙個通知的效果。

跟subscribe-publish模式相同,細微不同是該模式不是直接呼叫,而是通過乙個broker(訊息佇列)

5、備忘錄模式/快照模式(memento)

發起人通過建立乙個備忘錄,儲存發起者的狀態,管理者管理備忘錄,客戶可以在合適的時候對狀態進行恢復。

6、中介者模式(mediator)

將多對多的通訊轉換為一對多的通訊,且減少各個模組之間的依賴

colleague類中儲存乙個mediator類的指標,而無需知道與他直接通訊的是誰

但是會導致mediator類的複雜度上公升(需要維護各個類之間的關係)

7、命令模式(command)

將具體receiver(執行者)封裝到具體的command裡面,在呼叫者中儲存乙個列表或map的形式,呼叫者無需知道具體呼叫的是哪個命令,例如遊戲按鍵

就是對具體的指令進行了封裝。

可以對呼叫者和執行者之間進行解耦,結合備忘錄模式還可以進行操作的撤銷和重做。缺點是可能會導致具體command類的過多

8、訪問者模式(visitor)

資料的元素類和資料visitor類分開,元素類中只儲存資料結構相關的**,visitor中儲存具體處理邏輯**。

訪問元素時accept傳入visitor指標,然後呼叫相關visitor的visit方法。

將資料和處理方法解耦,好處是新增visitor類時可擴充套件;缺點是新增element類時需要改大量的visitor的**。

9、責任鏈模式(chain of responsibility)

每個handler類中儲存他的後繼類,如果沒有後繼類,則他需要自己處理。

將一系列具體處理的類串起來,如果某個類可以處理這類問題則處理,否則交給他的後繼。

10、迭代器模式(iterator)

具體集合類通過getiterator生成乙個類相關的迭代器,並將類內部的list/vector/node等傳入,迭代器根據實現好的演算法進行遍歷(深度、廣度、正序、倒序等)

11、直譯器模式(interpreter)

作用是可以將文法的某種解析方式實現成一種設計模式,使文法易於實現和修改。

對於簡單的文法比較友好,當文法複雜時難以修改。而且實現效率並不高。

設計模式 行為型模式

行為型模式用於描述程式在執行時複雜的流程控制,即描述多個類或物件之間怎樣相互協作共同完成單個物件都無法單獨完成的任務,它涉及演算法與物件間職責的分配。行為型模式分為類行為模式和物件行為模式,前者採用繼承機制來在類間分派行為,後者採用組合或聚合在物件間分配行為。由於組合關係或聚合關係比繼承關係耦合度低...

設計模式(結構型模式 行為型模式)

一 結構型模式 1.介面卡模式 通過乙個具體類把適配者適配到目標介面中,使得原本不相容的那些類可以一起工作。舉個例子 可以把二分查詢和快排 適配者 封裝到乙個dataoperation 目標介面 介面中,再操作adapter 介面卡 來進行操作。adapter quicksort sortobj,b...

設計模式 行為型模式總結

什麼是行為型模式 行為型模式 行為型模式涉及到演算法和物件間職責的分配。它不僅描述物件或者類的模式,還描述它們之間的通訊模式。這些設計模式刻畫了在執行難以跟蹤的複雜的控制流。它們將你的注意力從控制流轉移到物件之間的 上來。分類 行為物件模式 封裝物件 封裝變化是很多設計模式的主題,當乙個程式的某個方...