行為型模式描述類或對象如何互動及如何配置設定職責,它 主要涉及通過合理的處理方法,達到使系統更新性和維護性提高的目的。
行為模式
1.職責鍊模式 Chain of Responsibility
2.指令模式 Command
3.解釋器模式 Interpreter
4.疊代器模式 Iterator
5.中介者模式 Mediator
6.備忘錄模式 Memento
7.觀察者模式 Observer
8.狀态模式 State
9.政策模式 Strategy
10.模闆方法模式 Template Method
11.通路者模式 Visitor
職責鍊模式使多個對象都有機會處理請求,進而避免請求的發送者和接收者之間的耦合關系。将這些對象連成一條鍊,并沿着這條鍊傳遞該請求,直到有一個對象處理它為止。
“擊鼓傳球”遊戲就是職責鍊模式的一種應用,鼓起,球從人手中傳遞,鼓落,拿球的人要做某件事。

指令模式将一個請求封裝為一個對象,進而使你可用不同的請求對客戶進行參數化;可以對請求排隊或記錄請求日志,以及支援可撤銷的操作。
指令模式是對“行為的請求者”和“行為的實作者”進行了解耦。
Invoker對象可以在不同的時刻指定、排列、執行操作,支援取消、重做的操作,支援事務,記錄操作的日志。
解釋器模式,給定一個語言,定義它的問法的一種表示,并定義一個解釋器,這個解釋器使用該表示來解釋語言中的句子。
一個特定類型的複雜問題頻繁出現,這時我們可以用解釋器模式将負責對象表述為一個簡單的對象,再進行處理。正規表達式就是一個非常好的例子。
疊代器模式提供了一種方法順序通路一個聚合對象中各個元素,而又不需要暴露該對象的内部表示。當我們需要對聚集有多種方式周遊時,可以考慮用疊代器模式。疊代器模式提供“開始、下一個、是否結束、目前哪一項…”等統一的接口。
疊代器模式分離了集合對象的周遊行為,抽象出一個疊代器類來負責,這樣既可以做到不暴露内部結構,又可以讓外部代碼透明底通路集合内部的資料。松散了耦合性,做到了資訊隐蔽。
比如老師向班長要一個學生花名冊,班長可以按學号進行排列,也可以按姓名首字母進行排列,隻要包括了全部學生就行了。
中介者模式用一個中介對象來封裝一系列的對象互動。中介者是各對象不需要顯式地互相引用,進而使其耦合松散,而且可以獨立地改變它們之間的互動。
中介者模式,将多個對象之間的多對多的關系轉變為了一對一的關系。對象間的互相通信,都需要通過中介者對象來完成,一個對象的增加和移除,不影響其他對象,這樣就降低了他們之間的耦合。
備忘錄模式在不破壞封裝性的前提下,捕獲一個對象的内部狀态,并在該對象之外儲存這個狀态,這樣以後就可以将該對象恢複到原先儲存的狀态了。
觀察者模式定義了對象間的一種一對多的依賴關系,當一個對象的狀态發生變化時,所有依賴它的對象都會得到通知,并被自動更新,
系統中有兩個方面,其中一個方面依賴與另一個方面,我們把這兩個方面抽象,是各自可以獨立的變化和複用。
就像我們現在所用到的分層,不就是一層層的依賴麼?還有系統元件更新,系統功能也跟着變化,這也屬于觀察者模式。
狀态模式允許一個對象在其内部狀态改變時改變它的行為,讓對象看起來似乎修改了它的類。
狀态模式就是把系統的多個狀态分割開來,分布到State的子類中,消除了龐大的分支語句,減少了耦合,同時也很容易增加新的狀态的和轉換。
這就相當于一個Schedule或School Timetable一樣,時間的改變,我們的行程或課程也随之改變。
政策模式定義一系列的算法,把它們一個個封裝起來,并且使它們可以互相替換。本模式使得算法的變化不會影響到使用算法的客戶。
政策模式将每一個算法封裝到一個具有公共接口的獨立類中,解除了客戶與具體算法的直接耦合,是客戶改變算法更為容易。
政策模式+簡單工廠+反射+配置檔案可以組成更為靈活的方式。
模版方法模式定義一個操作的算法骨架,而将一些步驟延遲到子類中,模版方法使得子類可以不改變一個算法的結構即可重定義該算法的某些特定步驟。
模版方法就是把不變的行為搬到了超類中,去除了子類中的重複代碼。
多個客戶去銀行開戶,大家都需要填寫一個開戶表單,表單的格式都是一樣的,但是每個人填寫的内容卻是不同的,客戶是需要填寫不同的内容即可,而不是把整個表單抄一遍。
通路者模式表示一個作用于某對象結構中的個各原色的操作。它使你可以在不改變各元素的類的前提下定義作用于這些元素的新操作。
通路者模式适用于資料結構相對穩定的系統。它是将資料結構和作用于結構上的操作分離開來,完成了解耦,可以是操作集合自由演化,但不适合更改資料結構。