訪問者模式在處理資料結構較穩定,但是作用於其上的操作需要經常變化的問題時是非常有效的。
訪問者模式是指作用於乙個物件結構體上的元素的操作。訪問者可以使用使用者在不改變該結構體中的類的基礎上定義乙個新的操作。
(1)visitor:為每個element的類宣告了乙個訪問操作。該訪問操作的名字最好要包含被訪問的類的名字,以便確認該訪問操作是專門針對哪個具體的類。
(2)concretevisitor:實現visitor宣告的運算。每個運算實現為對應的類的物件定義的演算法的一部分。concretevisitor提供演算法的環境並且儲存其區域性狀態。
(3)element:定義了一些基本的方法,其中包含提供基本資料的方法,例如一些get()和set()方法。重要的是,每個element子類都必須定義乙個接受者方法,該方法一visistor為引數型別:accept(visitor),其作用是為被訪問者物件與訪問者物件之間的互動提供介面。
(4)concreteelement:具體的element的子類,例如elementa,該類包含乙個accept方法接受訪問者物件。另外,該類還可能定義一些其他的方法以幫助訪問者實現一些功能。
(5)objectstructure:提供乙個高層介面,允許訪問者訪問element的子類。在該類中可以包含乙個結構,例如arraylist,vector等,提供所要訪問的element類的列表。
假設人由手,腳,身體,頭組成。
所有身體部位的集合
public class compositestructure
public void attach(bodyparts part)
public void detach(bodyparts part)
public void accept(visitor v)
}}public abstract class bodyparts
頭
public class head extends bodyparts
public void accept(visitor v)
}...
visit實現
public abstract inte***ce visitor
public class describevisitor implements visitor
}
(1)使得在訪問者類中針對複雜類結構中的某個類新增新方法較為容易,即只需要簡單地新增乙個新的訪問者方法即可。如果不採用訪問者模式,則需要在每個類中新增乙個方法。
(2)訪問者將相關的方法集中在乙個具體的訪問者類中,而將其他相關的方法集中在另外乙個具體的訪問者類中。
增加乙個具體的新的concreteelement模擬較困難。此時需要在每個concretevisitor類中新增該concreteelement類的訪問方法。
行為型設計模式
職責鏈模式 使用多個物件都有機會處理請求,從而避免請求的傳送者和接受者之間的耦合關係。將這個物件連成一條鏈,並沿著這條鏈傳遞該請求,直到有乙個物件處理它為止。職責鏈模式結構圖 abstarct class handler處理請求 this.gettype name,request 轉移到下一位 cl...
行為型 設計模式
訪問者模式 資料結構相對穩定,對資料操作可變性強,資料結構提供accept方法接收乙個visitor,不同的visitor有不同的訪問此類資料結構的方法,乙個visitor多個資料 beandefinitionvisitor 或多個visitor乙個資料 模板模式 將演算法的基本步驟抽象到父類,子類...
設計模式行為型
一 責任鏈模式 這種模式中,有傳送者和接收者。通常,每個接收者都包含對另乙個接收者的引用,形成一條鏈,如果乙個接收者不能處理該請求,那麼它會把相同的請求傳給下乙個接收者,依次類推。這種模式將請求的傳送者和接收者解耦,但是不能保證請求一定被接收。使用場景是有1.多個物件可以處理同乙個請求,具體哪個物件...