訪問者模式
1.定義
它表示乙個作用於某物件結構中的各個元素的操作,它讓我們可以在不改變各元素的類的前提下定義作用於這些元素的新操作
2.理解
這用於某個物件結構中的元素數目比較固定(基本不會變動),而對於這些元素的操作可能要變化(增加新操作),vistor提供了在某個狀態下,對物件結構中各元素的不同操作的訪問介面,物件中使用accept介面接受乙個具體的訪問者。符合open-close原則。
訪問者模式適用於資料結構相對穩定的系統,它把資料結構和作用於結構上的操作之間的耦合解開,使得操作集合可以相對自由地演化。
訪問者模式的優點就是增加新的操作很容易,因為增加新的操作就意味著增加乙個新的訪問者。訪問者模式將有關的行為集中到乙個訪問者物件中。缺點是是增加新的資料結構變得複雜
3、何時使用訪問者模式
(1)類的結構很複雜,很少對類做修改;但是經常需要向其中新增新的操作
(2)需要對乙個組合結構中的物件進行很多不相關的操作,但是又不想讓這些操作」汙染」這些物件的類,可以考慮將相關的操作集中起來,定義在乙個訪問者類中
4.類結構圖
訪問者模式包含如下角色:
抽象訪問者(vistor): — 為該物件結構中concreteelement的每乙個類宣告乙個visit操作。該操作的名字和特
徵標識了傳送visit請求給該訪問者的那個類。這使得訪問者可以確定正被訪問元素
的具體的類。這樣訪問者就可以通過該元素的特定介面直接訪問它。
具體訪問者(concretevisitor): — 實現每個由visitor宣告的操作。每個操作實現本演算法的一部分,而該演算法片斷乃是
對應於結構中物件的類。concretevisitor為該演算法提供了上下文並儲存它的區域性狀態。
這一狀態常常在遍歷該結構的過程中累積結果。
抽象元素(element):定義乙個accept操作,它以乙個訪問者為引數。
具體元素(concreteelement): 實現accept操作,該操作以乙個訪問者為引數。
物件結構(objectstructure): 能列舉它的元素。可以提供乙個高層的介面以允許該訪問者訪問它的元素。可以是乙個復合或是乙個集合,如乙個列表或乙個無序集合。
設計模式 訪問者模式
訪問者模式是一種資料操作與資料結構分離的設計模式,訪問者模式的基本想法是,軟體系統中擁有乙個由許多物件構成的 比較穩定的物件結構,這些物件的類都擁有乙個accept方法用來接受訪問者物件的訪問。訪問者是乙個介面,它擁有乙個visit方法,這個方法對訪問到的物件結構中不同型別的元素作出不同的處理。在物...
設計模式 訪問者模式
訪問者模式 visitor 表示乙個作用於某物件結構中的各元素的操作。它使你可以在不改變各元素的類的前提下定義作用於這些元素的新操作。例子 男人和女人在不同的狀態下會有不同反應,採用訪問者模式,可以增加狀態很方便 抽象狀態類 class action 男人反應 virtual void getwom...
設計模式 訪問者模式
在訪問者模式 visitor pattern 中,我們使用了乙個訪問者類,它改變了元素類的執行演算法。通過這種方式,元素的執行演算法可以隨著訪問者改變而改變。這種型別的設計模式屬於行為型模式。根據模式,元素物件已接受訪問者物件,這樣訪問者物件就可以處理元素物件上的操作。1 符合單一職責原則。2 優秀...