行為型模式

2022-09-23 08:12:11 字數 1230 閱讀 5228

模式動機(strategy pattern):在完成乙個任務時可能有多種方式,具體使用哪種方式最有效,需要視條件而定,不同條件下所選擇的策略也有所不同,這就需要在乙個環境中對當前的情況做出各種判斷,在程式設計中表現為分支結構的實現,即在乙個環境類中通過不同分支來決定使用哪種策略,這種將實現策略與當前環境都封裝在乙個類中的設計方法稱為硬編碼。

硬編碼有如下缺點:其一,如果環境發生改變需要增加條件判斷時,需要修改當前環境類以增加分支;其二,在實時性方面,也許客戶不願意支援它們不需要的分支演算法,因為分支判斷造成一定的延時;再者,將實現模組與環境狀態混合在一起,不僅難以理解,而且也更加難以維護。

鑑於上述原因,可以使用策略模式來解決。策略模式思想非常簡單,卻十分有效。其將每乙個策略都封裝為乙個具體類,將各個策略的公共介面抽取出來封裝為乙個策略介面,令環境類和策略接**互即可。這樣,如果客戶想新增新的策略方法,只需新增乙個策略介面的實現類即可,而環境類完全不必關注到底該使用哪個策略,因為在它看來,所有的策略方法都是一樣的。  

模式**:

bt_策略模式.h:  

1 #ifndef sp_h

2 #define sp_h

3 #include

4 using namespace std;

5 6 /*

7 抽象策略介面

8 */

9 class strategy

10 13 virtual void algorithm() = 0;

14 };

15 16 /*

17 具體策略類

18 */

19 class concretestrategya : public strategy

20 26 };

27 class concretestrategyb : public strategy

28 34 };

35 36 /*

37 環境上下文類

38 */

39 class context

40 43 void execute()

44

47 48 private:

49 strategy* strategy;

50 };

51 52 #endif // sp_h  

測試用例.cpp:  

1 #include "bt_策略模式.h"

2 3 int main()

4

行為型模式

1.職責鏈模式 chain of responsibility 定義 避免請求傳送者與接收者耦合在一起,讓多個物件都又肯接受請求,將這些物件鏈結成一條鏈,讓多個物件都有可能接收邀請,直到有物件處理它為止。職責鏈是一種物件行為型模式 結構圖 抽象處理者handler 案例 採購單 優點 系統增加乙個新...

行為型模式

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

行為型模式

行為型模式 1.template method模板方法 定義乙個操作種的演算法的框架,而將一些步驟延遲到子類中,使得子類可以不改變乙個演算法的結構即可重定義該演算法的某些特定步驟。2.command 命令模式 將以個請求封裝成乙個物件,從而讓你使用不同的請求把客戶端引數化,對請求排隊或者記錄請求日誌...