?????? 行為型模式描述類或對象如何交互及如何分配職責,它?主要涉及通過合理的處理方法,達到使系統升級性和維護性提高的目的。
行為模式
????? 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??
### 職責鏈模式 Chain of Responsibility
????? 職責鏈模式使多個對象都有機會處理請求,從而避免請求的發送者和接收者之間的耦合關系。將這些對象連成一條鏈,并沿著這條鏈傳遞該請求,直到有一個對象處理它為止。
?????“擊鼓傳球”游戲就是職責鏈模式的一種應用,鼓起,球從人手中傳遞,鼓落,拿球的人要做某件事。

### 命令模式Command
????? 命令模式將一個請求封裝為一個對象,從而使你可用不同的請求對客戶進行參數化;可以對請求排隊或記錄請求日志,以及支持可撤銷的操作。
????? 命令模式是對“行為的請求者”和“行為的實現者”進行了解耦。
????? Invoker對象可以在不同的時刻指定、排列、執行操作,支持取消、重做的操作,支持事務,記錄操作的日志。?

### 解釋器模式 Interpreter
????? 解釋器模式,給定一個語言,定義它的問法的一種表示,并定義一個解釋器,這個解釋器使用該表示來解釋語言中的句子。
????? 一個特定類型的復雜問題頻繁出現,這時我們可以用解釋器模式將負責對象表述為一個簡單的對象,再進行處理。正則表達式就是一個非常好的例子。?

### 迭代器模式 Iterator
????? 迭代器模式提供了一種方法順序訪問一個聚合對象中各個元素,而又不需要暴露該對象的內部表示。當我們需要對聚集有多種方式遍歷時,可以考慮用迭代器模式。迭代器模式提供“開始、下一個、是否結束、當前哪一項…”等統一的接口。
????? 迭代器模式分離了集合對象的遍歷行為,抽象出一個迭代器類來負責,這樣既可以做到不暴露內部結構,又可以讓外部代碼透明底訪問集合內部的數據。松散了耦合性,做到了信息隱蔽。
????? 比如老師向班長要一個學生花名冊,班長可以按學號進行排列,也可以按姓名首字母進行排列,只要包括了全部學生就行了。?

### 中介者模式 Mediator
????? 中介者模式用一個中介對象來封裝一系列的對象交互。中介者是各對象不需要顯式地相互引用,從而使其耦合松散,而且可以獨立地改變它們之間的交互。
????? 中介者模式,將多個對象之間的多對多的關系轉變為了一對一的關系。對象間的相互通信,都需要通過中介者對象來完成,一個對象的增加和移除,不影響其他對象,這樣就降低了他們之間的耦合。?

### 備忘錄模式 Memeton
????? 備忘錄模式在不破壞封裝性的前提下,捕獲一個對象的內部狀態,并在該對象之外保存這個狀態,這樣以后就可以將該對象恢復到原先保存的狀態了。?

### 觀察者模式 Observer
????? 觀察者模式定義了對象間的一種一對多的依賴關系,當一個對象的狀態發生變化時,所有依賴它的對象都會得到通知,并被自動更新,
??????? 系統中有兩個方面,其中一個方面依賴與另一個方面,我們把這兩個方面抽象,是各自可以獨立的變化和復用。
??????? 就像我們現在所用到的分層,不就是一層層的依賴么?還有系統組件升級,系統功能也跟著變化,這也屬于觀察者模式。

### 狀態模式 State
????? 狀態模式允許一個對象在其內部狀態改變時改變它的行為,讓對象看起來似乎修改了它的類。
????? 狀態模式就是把系統的多個狀態分割開來,分布到State的子類中,消除了龐大的分支語句,減少了耦合,同時也很容易增加新的狀態的和轉換。
???????這就相當于一個Schedule或School Timetable一樣,時間的改變,我們的行程或課程也隨之改變。

### 策略模式 Strategy
????? 策略模式定義一系列的算法,把它們一個個封裝起來,并且使它們可以相互替換。本模式使得算法的變化不會影響到使用算法的客戶。
????? 策略模式將每一個算法封裝到一個具有公共接口的獨立類中,解除了客戶與具體算法的直接耦合,是客戶改變算法更為容易。
???????策略模式+簡單工廠+反射+配置文件可以組成更為靈活的方式。?

### 模版方法模式 Template Method
????? 模版方法模式定義一個操作的算法骨架,而將一些步驟延遲到子類中,模版方法使得子類可以不改變一個算法的結構即可重定義該算法的某些特定步驟。
???????模版方法就是把不變的行為搬到了超類中,去除了子類中的重復代碼。
???????多個客戶去銀行開戶,大家都需要填寫一個開戶表單,表單的格式都是一樣的,但是每個人填寫的內容卻是不同的,客戶是需要填寫不同的內容即可,而不是把整個表單抄一遍。

### 訪問者模式 Visitor
????? 訪問者模式表示一個作用于某對象結構中的個各原色的操作。它使你可以在不改變各元素的類的前提下定義作用于這些元素的新操作。
??????? 訪問者模式適用于數據結構相對穩定的系統。它是將數據結構和作用于結構上的操作分離開來,完成了解耦,可以是操作集合自由演化,但不適合更改數據結構。?
