訪問者模式(visitor pattern)屬於物件行為型模式的一種,表示乙個作用於其物件結構中的各元素的操作,它可以在不改變各元素類的前提下定義作用於這些元素的新操作。可以這麼說,訪問者模式算是 gof 23 中設計模式中最複雜的乙個,在實際開發中,使用不是非常廣泛。訪問者模式的類圖如下,
我們先來通過乙個具體的例子了解一下訪問者模式,首先定義兩個介面,乙個表示被訪問物件的內部元素,另外乙個表示訪問者物件,
public
inte***ce elementnode
public
inte***ce visitor
定義兩個基於上述內部元素介面的兩個具體元素類,
public
class
concreteelementnodea
implements
elementnode
}
public
class
concreteelementnodeb
implements
elementnode
}
定義兩個基於上述訪問者介面的兩個具體訪問者類,
public
class
concretevisitora
implements
visitor
public
void
visitelementnodeb(concreteelementnodeb nodeb)
}
public
class
concretevisitorb
implements
visitor
public
void
visitelementnodeb(concreteelementnodeb nodeb)
}
測試類:
public
class visitortest
}
執行結果:
一般而言,如果物件結構中物件對應的類很少改變,但經常需要在此物件結構上定義新的操作,或者需要對乙個物件結構中的物件進行很多不同的並且不相關的操作,同時避免讓這些操作」汙染」這些物件的類,也不希望在增加新操作時修改這些類嗎,那麼訪問者模式值得一試。
從上述**可以看出,訪問者模式的優缺點還是很明顯的:
設計模式 訪問者模式
訪問者模式是一種資料操作與資料結構分離的設計模式,訪問者模式的基本想法是,軟體系統中擁有乙個由許多物件構成的 比較穩定的物件結構,這些物件的類都擁有乙個accept方法用來接受訪問者物件的訪問。訪問者是乙個介面,它擁有乙個visit方法,這個方法對訪問到的物件結構中不同型別的元素作出不同的處理。在物...
設計模式 訪問者模式
訪問者模式 visitor 表示乙個作用於某物件結構中的各元素的操作。它使你可以在不改變各元素的類的前提下定義作用於這些元素的新操作。例子 男人和女人在不同的狀態下會有不同反應,採用訪問者模式,可以增加狀態很方便 抽象狀態類 class action 男人反應 virtual void getwom...
設計模式 訪問者模式
在訪問者模式 visitor pattern 中,我們使用了乙個訪問者類,它改變了元素類的執行演算法。通過這種方式,元素的執行演算法可以隨著訪問者改變而改變。這種型別的設計模式屬於行為型模式。根據模式,元素物件已接受訪問者物件,這樣訪問者物件就可以處理元素物件上的操作。1 符合單一職責原則。2 優秀...