行為型模式
行為型模式用於描述程式在執行時複雜的流程控制,即描述多個類或物件之間怎樣相互協作共同完成單個物件都無法單獨完成的任務,它涉及演算法與物件間職責的分配。在軟體工程
中, 行為型模式為設計模
式的一種型別,用來識別物件之間的常用交流模式並加以實現。如此,可在進行這些交流活動時增強彈性。
行為型模式一共有11種:
其中有分為:
演算法封裝:模板方法、策略、命令模式
物件去耦:中介、觀察者模式
抽象集合:迭代器模式
行為擴充套件:訪問者、責任鏈模式
物件狀態:狀態模式
直譯器模式
定義:定義乙個操作中演算法的骨架,而將一些步驟延遲到子類中。模板方法使子類可以重定義演算法的某些特定步驟而不改變該演算法的結構。
適用:1.需要一次性實現演算法的不變部分,並將可變行為留給子類來實現。2子類的共同行為應該被提出來放到公共類中,以避免代買重複。現有**的差別應該被分離為新的操作。然後用乙個呼叫這些新操作的模板方法來替換這些不同的**。
類圖:
定義:定義一系列演算法,把它們乙個個封裝起來,並且使它們可互相替換。本模式使得演算法可獨立於使用它的客戶而變化。
角色:策略介面(strategy)、具體策略、環境物件
理解:環境物件持有strategy的引用,strategy物件可以動態改
類圖:
定義:將請求封裝成乙個物件,從而可用不同的請求對客戶端進行引數化,對請求排隊或記錄請求日誌,以及支援可撤銷的操作。
角色:客戶端(client)、命令呼叫者(invoker)、命令介面(command)、具體命令(concretecommand)、命令接收者(receiver)
理解:1.invoker保持有command的引用,command保持有receiver的引用。2.客戶建立receiver、concretecommand並把receiver設定給concretecommand,客戶端直接通過concretecommand.execute執行命令。或者建立乙個invoker並把concretecommand設定給invoker,然後通過invoker來呼叫命令。
類圖:
定義:用中介物件封裝一系列的物件互動。中介者使得各物件不需要顯示地互相引用,從而使其耦合鬆散,而且可以獨立的改變它們之間的互動。
角色:中介者介面(mediator)、具體中介者、同事者介面(colleague),具體同事者。
理解:每個colleague都有乙個mediator例項,mediator應該知道所有的colleague
類圖:
定義:定義了一種一對多的關係,讓多個觀察者監聽某一主題物件,這個主題物件的狀態變化時,會通知所有觀察者物件,使它們自己更新自己
角色:發布者介面(subject)、具體發布者、監聽者介面(observer)、具體監聽者。
理解:subject提供註冊於登出的方法,客戶把所有的observer註冊到subject當中,當需要時subject遍歷所有註冊的observer並通知他們。
類圖:
定義:提供一種方法順序的訪問乙個聚合物件的各個元素,而又不暴露該物件內部表示
角色:迭代器、集合
理解:把遍歷集合的職能從集合本身轉移到迭代器物件,不同的迭代器可以執行不同的遍歷策略。
適用:1.需要訪問組合物件的內容,而又不暴露其內部表示。2.需要通過多種方式遍歷組合物件3.需要提供乙個統一的介面,用來遍歷各種型別組合物件。
類圖:
定義:表示乙個作用於某物件結構中的各元素的操作。它讓我們可以在不改變各元素的類的前提下定義作用於這些元素的新操作。
角色:訪問者(vistor)介面、具體訪問者、訪問元素(element)介面、具體元素
理解:1.元素物件通常是「部分-整體」結構中的節點。2.客戶端建立乙個concretevistoer,把它傳給乙個concreteelement,concreteelement的所有集合都接受concretevistoer的訪問。
適用:乙個複雜的物件結構包含很多其他物件,它們有不同的介面,但是相對這些物件實施一些依賴於其具體型別的操作。
需要對乙個組合結構中的物件進行很多不相關的操作,但是不想讓這些操作汙染這些物件的類。可將相關操作集中起來,定義在乙個訪問者類中,並在需要在訪問者中定義的操作時使用它。
定義複雜的結構類很少作修改,但經常需要向其新增新的操作。
類圖:
定義:使多個物件都有機會處理請求,從而避免請求的傳送者與接受者之間的耦合關係。將這個物件連成一條鏈傳遞該請求,直到有乙個物件處理它為止。
理解:物件引用同一型別的另乙個物件,形成一條鏈。鏈中的每個物件實現了同樣的方法,處理對鏈中第乙個物件發起的同乙個請求。
適用:有多個物件可處理請求,而處理程式只有在執行時才能確定。
向一組物件發出請求,而不想現顯式指定處理請求的特定處理程式。
類圖:定義:在不破壞封裝的前提下,捕獲乙個物件的內部狀態,並在該物件之外儲存這個狀態。這樣以後就可將該物件恢復到原先儲存的狀態。、
角色:有三個角色:發起人(originatior)、備忘錄(memento)、看管人(caretaker)。
理解:發起人生成乙個備忘錄給看管人,看管人儲存備忘錄。當需要時,看管人獲取備忘錄交給發起人,發起人根據備忘錄恢復自己。
類圖:定義:允許乙個物件在其內部狀態改變時改變他的行為。物件看起來似乎改變了它的類。
角色:有2個角色:環境(context)、狀態(state)
理解:1.state可以理解為乙個介面。2.context持有state的乙個例項,動態的改state就動態的改了context的行為。
類圖:定義:給定乙個語言,定義它的文法的一種表示,並定義乙個直譯器,這個直譯器使用該表示來解釋語言中的句子。
角色:環境(context)、直譯器
理解:給定乙個環境,建立不同的直譯器並把環境傳給直譯器,不同的直譯器對環境有不同的解釋。
類圖:
行為型模式總結
行為型模式總結 行為型模式用於描述程式在執行時複雜的流程控制,即描述多個類或物件之間怎樣相互協作共同完成單個物件都無法單獨完成的任務,它涉及演算法與物件間職責的分配。行為型模式一共有11種 模板方法模式 template method 策略模式 strategy 命令模式 command 中介者模式...
設計模式 行為型模式總結
什麼是行為型模式 行為型模式 行為型模式涉及到演算法和物件間職責的分配。它不僅描述物件或者類的模式,還描述它們之間的通訊模式。這些設計模式刻畫了在執行難以跟蹤的複雜的控制流。它們將你的注意力從控制流轉移到物件之間的 上來。分類 行為物件模式 封裝物件 封裝變化是很多設計模式的主題,當乙個程式的某個方...
行為型模式
1.職責鏈模式 chain of responsibility 定義 避免請求傳送者與接收者耦合在一起,讓多個物件都又肯接受請求,將這些物件鏈結成一條鏈,讓多個物件都有可能接收邀請,直到有物件處理它為止。職責鏈是一種物件行為型模式 結構圖 抽象處理者handler 案例 採購單 優點 系統增加乙個新...