舊事重提 行為型設計模式總結一

2022-03-19 18:08:13 字數 1019 閱讀 5777

由於行為型模式比較多,本人打算分兩篇部落格總結。今天一次介紹直譯器、中介者、訪問者、策略、備忘錄、迭代器模式。

直譯器:

適用場合:如果一種特定型別的問題發生的頻率足夠高,那麼可能就值得向該問題的各個例項表述為乙個簡單語言中的句子。當有乙個語言血藥解釋執行,並且你可將該語句中的句子表示為乙個抽象語法樹時,可使用直譯器模式。

例如機房收費系統中,組合查詢中,如果沒有在sql語句中對錶中字段起別名,而且也沒有使用檢視進行中英文轉換,那麼就可以在ui層中使用該模式,將對應的引數進行解釋。解釋成對應表中字段。此方發沒有沒有去實現,只是感覺應該可以實現。

中介者:

中介者模式,就是通過mediator類,來接受、傳送訊息,保持具體同事類的聯絡。而每個具體同事類只管自己的行為就可以了,而同事類之間的關係由mediator類來保持和維護。

所以,我們可以看到中介者模式的優勢,它達到了同事類的解耦,於此同時,也暴露了它的缺點,如果同事類太多的話,mediator類將會非常龐大、複雜,使系統難以維護。

訪問者:

訪問者模式的目的就是把處理方法從資料結構中分離出來。所以它只適用於比較穩定的資料結構。這樣的情況下使用訪問者就可以靈活的變化演算法。就如上面圖中所例,資料結構很明顯,人只分為男女兩次,如果在想增加或減少資料結構的話,是非常困難的。而對於這個例子,我們卻可以在action類中給他加很多行為。

策略:策略模式相對簡單,再此不做過多講解。

備忘錄:

originator是發起人,複雜建立乙個備忘錄,用以記錄當前時刻它內部的狀態,並可使用備忘錄恢復內部狀態;memento是備忘錄,儲存originator物件的內部狀態,並可防止originator以外的其他物件訪問備忘錄;caretaker是管理者類,負責儲存好備忘錄。

備忘錄最大的作用就是記憶角色的某乙個狀態,以後後來恢復到這個狀態。例如命令模式中的撤銷功能,我們就可以在命令模式中使用備忘錄模式來儲存可撤銷操作的狀態。

迭代器:

迭代器模式就是分離了幾何物件的遍歷行為,抽象出乙個迭代器來負責,這樣可以做到不暴露幾何的內部結構,又可讓外部**透明地訪問幾何內部的資料。

行為型設計模式

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

行為型 設計模式

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

設計模式行為型

一 責任鏈模式 這種模式中,有傳送者和接收者。通常,每個接收者都包含對另乙個接收者的引用,形成一條鏈,如果乙個接收者不能處理該請求,那麼它會把相同的請求傳給下乙個接收者,依次類推。這種模式將請求的傳送者和接收者解耦,但是不能保證請求一定被接收。使用場景是有1.多個物件可以處理同乙個請求,具體哪個物件...