設計模式行為型

2021-09-29 12:15:31 字數 1970 閱讀 8004

一. 責任鏈模式

這種模式中,有傳送者和接收者。通常,每個接收者都包含對另乙個接收者的引用,形成一條鏈,如果乙個接收者不能處理該請求,那麼它會把相同的請求傳給下乙個接收者,依次類推。

這種模式將請求的傳送者和接收者解耦,但是不能保證請求一定被接收。

使用場景是有1. 多個物件可以處理同乙個請求,具體哪個物件處理該請求由執行時刻自動確定。2. 在不明確指定接收者的情況下,向多個物件中的乙個提交乙個請求。 3. 可動態指定一組物件處理請求。

這種模式和裝飾者模式有一定相似的地方。

二. 命令模式

根據菜鳥教程的描述,「在軟體系統中,行為請求者與行為實現者通常是一種緊耦合的關係,但某些場合,比如需要對行為進行記錄、撤銷或重做、事務等處理時,這種無法抵禦變化的緊耦合的設計就不太合適」。

對於這個描述,我現在的理解不深。我理解的是,將乙個請求用乙個物件進行封裝,相當於在請求的發起者和請求之間加多一層,以便將請求者與請求進行解耦。

三. 解析器模式

這個看不太明白,感覺沒有應用的場景。

四. 迭代器模式

對這個理解的也不深,感覺用的也不多。

五. 中介者模式

用來降低多個物件和類之間的通訊複雜性。這種模式提供了乙個中介類,該類通常處理不同類之間的通訊,並支援松耦合,使**易於維護。

具體的做法是將交聯型(網狀)的關係轉化為星型關係,1、系統中物件之間存在比較複雜的引用關係,導致它們之間的依賴關係結構混亂而且難以復用該物件。 2、想通過乙個中間類來封裝多個類中的行為,而又不想生成太多的子類。缺點可能是中介者會龐大,變得複雜難以維護。具體的應用有mvc中的c的作用。

六. 備忘錄模式(應用比較少?)

主要解決:所謂備忘錄模式就是在不破壞封裝的前提下,捕獲乙個物件的內部狀態,並在該物件之外儲存這個狀態,這樣可以在以後將物件恢復到原先儲存的狀態。

何時使用:很多時候我們總是需要記錄乙個物件的內部狀態,這樣做的目的就是為了允許使用者取消不確定或者錯誤的操作,能夠恢復到他原先的狀態,使得他有"後悔藥"可吃。

如何解決:通過乙個備忘錄類專門儲存物件狀態。

關鍵**:客戶不與備忘錄類耦合,與備忘錄管理類耦合。

應用例項: 1、後悔藥。 2、打game時的存檔。 3、windows 裡的 ctri + z。 4、ie 中的後退。 4、資料庫的事務管理。

優點: 1、給使用者提供了一種可以恢復狀態的機制,可以使使用者能夠比較方便地回到某個歷史的狀態。 2、實現了資訊的封裝,使得使用者不需要關心狀態的儲存細節。

缺點:消耗資源。如果類的成員變數過多,勢必會占用比較大的資源,而且每一次儲存都會消耗一定的記憶體。

七. 觀察者模式

當物件間存在一對多關係時,則使用觀察者模式(observer pattern)。比如,當乙個物件被修改時,則會自動通知它的依賴物件。觀察者模式屬於行為型模式。應用是mvc中的事件機制。

八. 狀態模式

將乙個狀態封裝為乙個物件(狀態物件),這個物件會依賴於持有該狀態的物件。狀態物件有乙個或多個方法改變持有狀態的物件的行為。應用有: 狀態機,行為樹的動作節點等。

九. 空物件模式

to be continued……

十. 策略模式

意圖:定義一系列的演算法,把它們乙個個封裝起來, 並且使它們可相互替換。

主要解決:在有多種演算法相似的情況下,使用 if…else 所帶來的複雜和難以維護。

何時使用:乙個系統有許多許多類,而區分它們的只是他們直接的行為。

如何解決:將這些演算法封裝成乙個乙個的類,任意地替換。

關鍵**:實現同乙個介面。

應用例項: 1、諸葛亮的錦囊妙計,每乙個錦囊就是乙個策略。 2、飛機game裡面的bullet。

優點: 1、演算法可以自由切換。 2、避免使用多重條件判斷。 3、擴充套件性良好。

缺點: 1、策略類會增多。 2、所有策略類都需要對外暴露。

十一. 模板模式

to be continued……

十二. 訪問者模式

to be continued……

to be continued

行為型設計模式

職責鏈模式 使用多個物件都有機會處理請求,從而避免請求的傳送者和接受者之間的耦合關係。將這個物件連成一條鏈,並沿著這條鏈傳遞該請求,直到有乙個物件處理它為止。職責鏈模式結構圖 abstarct class handler處理請求 this.gettype name,request 轉移到下一位 cl...

行為型 設計模式

訪問者模式 資料結構相對穩定,對資料操作可變性強,資料結構提供accept方法接收乙個visitor,不同的visitor有不同的訪問此類資料結構的方法,乙個visitor多個資料 beandefinitionvisitor 或多個visitor乙個資料 模板模式 將演算法的基本步驟抽象到父類,子類...

行為型設計模式 游標模式

using system using system.collections.generic using system.linq using system.text public inte ce ienumerator 原 是object型別 bool movenext void reset publ...