行為型模式總結
行為型模式用於描述程式在執行時複雜的流程控制,即描述多個類或物件之間怎樣相互協作共同完成單個物件都無法單獨完成的任務,它涉及演算法與物件間職責的分配。
行為型模式一共有11種:模板方法模式(template method)、策略模式(strategy)、命令模式(command)、中介者模式(mediator)、觀察者模式(observer)、迭代器模式(iteratior)、訪問者模式(visiter)、責任鏈模式(chain of responsibility)、備忘錄模式(memento)、狀態模式(state)、直譯器模式(interpreter)。
模板方法模式的
定義優缺點
優點:實現了**復用
能夠靈活應對子步驟的變化,符合開放-封閉原則
策略模式
策略模式(strategy):定義了演算法家族,分別封裝起來,然他們之間相互替換。此模式讓演算法的變化,不會影響到使用演算法的客戶。
策略模式可以分為三類角色,分別為:抽象策略類(strategy),具體策略類(concretestrategy)、環境類(context)
抽象策略類(strategy):支援演算法的抽象方法,是所有具體策略類的父類。
具體策略類(concretestrategy):每一種具體的策略演算法。
環境類(context):使用具體演算法的角色,根據客戶端的情況,採用具體的的策略,定義所有的策略。
優點:擴充套件性提高,可靈活的擴充套件行為,且不會違背開閉原則。
策略可互相替換。
可以避免多重條件選擇語句。
缺點:任何微小的變化就可能增加乙個新的策略。
客戶端不能使用多個策略類,客戶端每次只能使用乙個策略類,不支援使用乙個策略類完成部分功能後再使用另乙個策略類來完成剩餘功能的情況。
命令模式
命令模式(command):將乙個請求封裝為乙個物件,從而是你可用不同的物件請求對客戶進行引數化,對請求排隊或記錄請求日誌,以及支援可撤銷操作命令模式大致分為四類:抽象命令類( command)、具體命令類( concretecommand)、呼叫者(invoker)、接收者(receiver)
呼叫者(invoker):1、收集具體命令 2、呼叫具體命令的方法
抽象命令類( command):所有命令實現的介面,宣告執行命令的方法
具體命令類( concretecommand):實現抽象命令類宣告的方法,呼叫執行命令的方法
接收者(receiver):執行各種命令。
優點:降低系統耦合度,將請求者和接收者分開。
可以將多個命令物件集合在一起。
缺點:多個具體命令類,導致系統複雜。
中介者模式
中介者模式(mediator pattern):用乙個中介物件(中介者)來封裝一系列的物件互動,中介者使各物件不需要顯式地相互引用,從而使其耦合鬆散,而且可以獨立地改變它們之間的互動。中介者模式又稱為調停者模式,它是一種物件行為型模式。
中介者模式大致分為四類,分別為抽象同事類(colleague)、具體同事類(concretecolleague)抽象中介者(mediator)、具體中介者(concretemediator)
抽象同事類(colleague):定義具體同事類的公有方法
抽象中介者(mediator):宣告乙個介面,用於具體同事之間的通訊
具體同事類(concretecolleague):1.先和通訊者之間進行通訊,2.通過中介者與其他具體同事類實現通訊。
具體中介者(concretemediator):協調各個具體同事者之間的通訊。
優點:減少物件之間直接互動產生的錯誤,多個物件之間的互動(多對多),變成了通過中介者,形成了一對錯的模式。
將各個同事時間接解耦,形成獨立的類,使系統變得松耦合,可靈活的增加新的中介者以及具體同事類。
缺點:中介者承擔角色任務重,中介者出現問題,導致系統崩潰。
增加新的具體同事類,需更改具體中介者類,違背了開閉原則,但是可以觀察者和狀態者模式可以更改該問題。
觀察者模式
觀察者模式定義物件之間的一對多依賴關係,當乙個物件改變狀態時,它的所有依賴物件都會自動獲得通知。觀察者模式定義了乙個一對多的依賴關係,讓乙個或多個觀察者物件監聽乙個主題物件。
觀察者模式大致包括四類:抽象主題(subject)、具體主題(concretesubject)、抽象觀察者(observer)、具體觀察者(concreteobserver)
抽象主題(subject):它把所有觀察者物件的引用儲存到乙個聚集裡,每個主題都可以有任何數量的觀察者。抽象主題提供乙個介面,可以增加和刪除觀察者物件。
具體主題(concretesubject):將有關狀態存入具體觀察者物件;在具體主題內部狀態改變時,給所有登記過的觀察者發出通知。
抽象觀察者(observer):為所有的具體觀察者定義乙個介面,在得到主題通知時更新自己。
具體觀察者(concreteobserver):實現抽象觀察者角色所要求的更新介面,以便使本身的狀態與主題狀態協調。
迭代器模式(iteratior)
迭代器模式
定義:提供一種方法順序的訪問乙個聚合物件的各個元素,而又不暴露該物件內部表示
角色:迭代器、集合
理解:把遍歷集合的職能從集合本身轉移到迭代器物件,不同的迭代器可以執行不同的遍歷策略。
適用: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.職責鏈模式 chain of responsibility 定義 避免請求傳送者與接收者耦合在一起,讓多個物件都又肯接受請求,將這些物件鏈結成一條鏈,讓多個物件都有可能接收邀請,直到有物件處理它為止。職責鏈是一種物件行為型模式 結構圖 抽象處理者handler 案例 採購單 優點 系統增加乙個新...