行為模式涉及到算法和對象間職責的分配。行為模式不僅描述對象或類的模式,還描述
它們之間的通信模式。這些模式刻劃了在運行時難以跟蹤的復雜的控制流。它們將你的注意
力從控制流轉移到對象間的聯系方式上來。
行為類模式使用繼承機制在類間分派行為。本章包括兩個這樣的模式。其中,Template Method(5.10)較為簡單和常用。模板方法是一個算法的抽象定義,它逐步定義該算法,每一步調用一個抽象操作或一個原語操作,子類定義抽象操作以具體實現該算法。另一種行為類模式是Interpreter(5.3)。它將一個文法表示為一個類層次,并實現一個解釋器作為這些類的一個操作。
行為對象模式使用對象復合而不是繼承。一些行為對象模式描述了一組對等的對象怎樣相互協作以完成其中任一個對象都無法單獨完成的任務。這里一個重點的問題是對等的對象如何互相了解對方。。對等對象可以保持顯式的對對方的引用,但那會增加它們的耦合度。在極端情況下,每一個對象都要了解所有其他的對象。Mediator(5.5)在對等對象間引入一個Mediator對象以避免這種情況的出現。Mediator提供了松耦合所需的間接性。
Chain Of Responsibility(5.1)提供更松的耦合。它讓你通過一條候選對象鏈隱式的向一個對象發送請求。根據運行時刻情況任一候選者都可以響應相應的請求。候選者的數目是任意的,你可以在運行時刻決定哪些候選者參與到鏈中。
Observe(5.7)模式定義并保持對象間的依賴關系。典型的Observer的例子是SmallTalk中的模型/視圖/控制器,其中一旦模型的狀態發生變化,模型的所有視圖都會得到通知。
其他的行為對象模式常將行為封裝在一個對象中并將請求指派給它。 Strategy ( 5 . 9 )模式將算法封裝在對象中,這樣可以方便地指定和改變一個對象所使用的算法。 Command ( 5 . 2 )模式將請求封裝在對象中,這樣它就可作為參數來傳遞,也可以被存儲在歷史列表里,或者以其他方式使用。State ( 5 . 8 )模式封裝一個對象的狀態,使得當這個對象的狀態對象變化時,該對象可改變它的行為。Visitor ( 5 . 11 )封裝分布于多個類之間的行為,而 Iterator( 5 . 4 )則抽象了訪問和遍歷一個集合中的對象的方式。