訪問者模式:表示乙個作用於某物件結構中的各元素的操作,它使你可以在不改變各元素的類的前提下定義作用於這些元素的新操作。visitor類,為該物件結構中concretevisitor的每乙個類宣告乙個visit操作。訪問者介面為使用不同演算法的子類宣告訪問操作。
concretevisitor1和concretevisitor2類,具體訪問者。每個操作實現這種演算法(1或2)的一部分。public
abstract
class
visitor
element類,定義乙個accept操作介面,它以乙個訪問者為引數public
class
concretevisitor1
extends
visitor
@override
public
void
visitconcreteelementb
(concreteelementb concreteelementb)
}public
class
concretevisitor1
extends
visitor
concreteelementa和concreteelementb類,具體元素,實現accept操作。public
abstract
class
element
objectstructure類,能列舉它的元素,提供乙個高層介面以允許訪問者訪問它的元素public
class
concreteelementa
extends
element
public
void
operationa()
---其它的相關方法
}public
class
concreteelementb
extends
element
public
void
operationb()
---其它的相關方法
}
客戶端**public
class
objectstructure
public
void
visit
(visitor visitor)
}}
舉乙個例子來理解該模式:人分為男人和女人,男人和女人在成功或戀愛時的反應不同。public
static
void
main
(string[
] args)
concreteelementa被concretevisitor1訪問
concreteelementb被concretevisitor1訪問
----
----
----
-------
concreteelementa被concretevisitor2訪問
concreteelementb被concretevisitor2訪問
這裡人的屬性男人和女人可以當成concreteelement
成功和戀愛或其它的狀態可以當成concretevisitor,它們去訪問元素(男人或女人)的具體反應。
people抽象類
狀態抽象類public
abstract
class
person
man類和woman類public
abstract
class
action
狀態的子類,success類(concretevisitor),其餘狀態(戀愛等)和success類**類似不進行列舉。public
class
manextends
person
}public
class
woman
extends
person
}
物件結構類public
class
success
extends
action
@override
public
void
getwomanconclusion
(person woman)
}
客戶端測試public
class
objectstructure
public
void
display
(action visitor)
}}
訪問者模式只適用於資料結構相對穩定的系統,例如上面的示例中人只分為男人和女人兩個型別,如果能有多個性別,「狀態」類中的抽象方法就不可能穩定,每增加乙個類別,就需要在狀態類和它的下屬類中都增加乙個方法。public
static
void
main
(string[
] args)
mansuccess高調
womansuccess低調
訪問者模式把資料結構和作用於結構之上的操作之間的耦合解開,使得操作集合可以相對自由地演化。訪問者模式的目的是要把處理從資料結構分離出來,如果系統有穩定的資料結構,又有易於變化的演算法的話,使用訪問者模式就是合適的,訪問者模式使演算法操作的增加變得容易。
設計模式筆記 訪問者模式
封裝一些作用於某種資料結構中的各元素的操作,它可以在不改變資料結構的前提下定義作用於這些元素的新的操作。visitor 抽象訪問者 抽象類或介面,宣告訪問者可以訪問哪些元素,具體到程式中就是visit方法的引數定義哪些物件是可以被訪問的 public inte ce ivisitorvisitor ...
設計模式 訪問者模式
訪問者模式是一種資料操作與資料結構分離的設計模式,訪問者模式的基本想法是,軟體系統中擁有乙個由許多物件構成的 比較穩定的物件結構,這些物件的類都擁有乙個accept方法用來接受訪問者物件的訪問。訪問者是乙個介面,它擁有乙個visit方法,這個方法對訪問到的物件結構中不同型別的元素作出不同的處理。在物...
設計模式 訪問者模式
訪問者模式 visitor 表示乙個作用於某物件結構中的各元素的操作。它使你可以在不改變各元素的類的前提下定義作用於這些元素的新操作。例子 男人和女人在不同的狀態下會有不同反應,採用訪問者模式,可以增加狀態很方便 抽象狀態類 class action 男人反應 virtual void getwom...