行爲模式
Visitor
- UML
-
- 角色
- 1.IVisitor 抽象訪問者角色,爲該對象結構中具體元素角色聲明一個訪問操做接口。該操做接口的名字和
參數標識了發送訪問請求給具休訪問者的具休元素角色,這樣訪問者就能夠經過該元素角色的特定接口直接訪問它。
- 2.ConcreteVisitor.具體訪問者角色,實現Visitor聲明的接口。
- 3.Element 定義一個接受訪問操做(accept()),它以一個訪問者(Visitor)做爲參數。
- 4.ConcreteElement 具體元素,實現了抽象元素(Element)所定義的接受操做接口。
- 5.ObjectStructure 結構對象角色,這是使用訪問者模式必備的角色。它具有如下特性:
能枚舉它的元素;能夠提供一個高層接口以容許訪問者訪問它的元素;若有須要,能夠設計成一個
複合對象或者一個彙集(如一個列表或無序集合)。
Interpreter(解釋器)
Mediator(中介者)
- UML
-
- 角色
- 1) 抽象中介者(Mediator)角色:抽象中介者角色定義統一的接口用於各同事角色之間的通訊。
- 2) 具體中介者(Concrete Mediator)角色:具體中介者角色經過協調各同事角色實現協做行爲。爲此它要知道並引用各個同事角色。
- 3) 同事(Colleague)角色:每個同事角色都知道對應的具體中介者角色,並且與其餘的同事角色通訊的時候,必定要經過中介者角色協做。
Strategy(策略)
- UML
-
- 角色
- Strategy類:定義了策略接口,用來約束一系列具體的策略算法。Context使用這個接口調用具體策略實現定義的算法。
- ConcreteStrategy:具體的策略實現,也就是具體的算法實現
- Context:上下文,負責和具體的策略類交互,維護一個對Strategy對象的引用。可定義一個接口來讓Strategy訪問他的數據。
- 優缺點
- 相關算法系列、提供了能夠替換繼承關係的辦法、消除了一些if else語句、實現的選擇
- 客戶端必須知道全部的策略類,並自行決定使用那一個策略類、Strategy和Context之間的通訊開銷、策略模式將致使產生不少策略類
State(狀態)
- UML
-
- 角色
- State類,抽象狀態類,定義一個接口以封裝與Context的一個特定狀態相關的行爲
- ConcreteState類,具體狀態,每個子類實現一個與Context的一個狀態相關的行爲
- Context類,維護一個ContcreteState子類的實例,這個實例定義當前的狀態
- 把Context交給子類來控制,Context保存着下一個狀態的引用,子類來更改這個引用
Command(命令)
- UML
- 角色
- 客戶端(Client)角色:建立一個具體命令(ConcreteCommand)對象並肯定其接收者
- 命令(Command)角色:聲明瞭一個給全部具體命令類的抽象接口
- 具體命令(ConcreteCommand)角色:定義一個接收者和行爲之間的弱耦合;實現execute()方法,負責調用接收者的響應操做。execute()執行方法
- 請求者(Invoker)角色:負責調用命令對象執行請求,相關的方法叫作行動方法。
- 接收者(Receiver)角色:負責具體實施和執行一個請求。任何一個類均可以成爲接收者,實施和請求的方法叫作行動方法。
Chain of Responsibility(職責鏈)
- UML
-
- 角色
Observer(觀察者)
- UML
- 角色
- Subject類,抽象主題角色:把全部對觀察者對象的引用保存在一個集合中,每一個抽象主題角色均可以有任意數量的觀察者。抽象主題提供一個接口,能夠增長和刪除觀察者角色。
- Observer類,抽象觀察者角色:爲全部具體的觀察者定義一個接口,在獲得主題的通知時更新本身
- ConcreteSubject類,具體主題角色,在內部狀態改變時,給全部等級過的觀察者發出通知。
- ConcreteObserver類,具體觀察者角色,實現抽象觀察者角色所須要的更新接口,以便使自己的狀態與主題的狀態相協調。若是須要,具體觀察者角色能夠保存一個指向具體主題角色的引用。
- 優缺點
- 觀察者和被觀察者之間簡歷一個抽象的耦合,觀察者模式支持廣播通信。
- 若是觀察者過多,將全部的觀察者都通知到會話費不少時間;若是被觀察者之間有循環依賴,會致使系統崩潰;若是是線程異步投遞,系統必須保證投遞是以自恰的方式進行的;寡女哈着不知道所觀察的對象是怎麼發生變化的。
Memento(備忘機制)
- UML
-
- 角色
- Originator類,當前操做對象,添加setMemento createMemento方法
- Memento類,做爲保存對象的備忘錄物件
- Caretaker類,保留原發者所創造的備忘錄物件
- 優缺點
- 在須要提供保存、恢復對象狀態的類中,必須提供兩個方法:.保存對象當前狀態方法:將對象自身(this)做爲參數傳入,建立備忘錄。.恢復對象以前狀態的方法:取出備忘錄/接收一個備忘錄對象,從中獲取對象以前的狀態
Template(模版)
- UML
-
- 角色
- 具體類靠抽象類中的模板方法來完成算法中不變的部分。
-
模板方法致使一種反向的控制結構,即父類調用子類的方法。模板方法調用下列類型的操做:
具體的操做,具體的
AbstractClass
的操做,原語操做,鉤子操做等。
結構模式