23種設計模式介紹(三) 行為型模式

2022-07-22 05:54:10 字數 3444 閱讀 9041

由於設計模式篇幅比較大,如果在一篇文章講完所有的設計模式的話不利於閱讀。於是我把它分為三篇文章

設計模式都是比較抽象的概念,所以大家一定要確保看懂類圖,而後再自己寫**加強記憶。

行為型模式一共有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)、直譯器

理解:給定乙個環境,建立不同的直譯器並把環境傳給直譯器,不同的直譯器對環境有不同的解釋。

類圖:

設計模式 四 行為型模式

1 命令模式 是一種資料驅動的設計模式,屬於行為型模式。請求以命令的形式包裹在物件中,並傳給呼叫物件。呼叫物件尋找可以處理該明林的適合的物件,並把該命令傳給相應的物件,該物件執行命令。建立乙個命令介面 public inte ce order建立乙個請求類 public class stock pu...

23種設計模式之行為型模式 策略模式

策略模式它定義了演算法家族,分別封裝起來,讓它們之間可以相互替換,此模式讓演算法的變化,不會影響到使用演算法的客戶。減少各種演算法類與使用演算法類之間的耦合 比如 商場收銀時如何 用打折還是返利,其實都是一些演算法,用工廠來生成演算法物件,這沒錯,但演算法本身只是一種策略,最重要的是這些演算法是隨時...

6 0行為型模式

行為型模式用於描述程式在執行時複雜的流程控制,即描述多個類或物件之間怎樣相互協作共同完成單個物件都無法單獨完成的任務,它涉及演算法與物件間職責的分配。行為型模式分為類行為模式和物件行為模式,前者採用繼承機制來在類間分派行為,後者採用組合或聚合在物件間分配行為。由於組合關係或聚合關係比繼承關係耦合度低...