訪問者( Visitor )模式:表示一個作用于某對象結構中的各元素的操作。它使你可以在不改變各元素的類的前提下定義作用于這些元素的新操作。

適用性:

  • 一個對象結構包含很多類對象,它們有不同的接口,而你想對這些對象實施一些依賴于其具體類的操作。
  • 需要對一個對象結構中的對象進行很多不同的并且不相關的操作,而你想避免讓這些操作污染這些對象的類。訪問者使得你可以將相關的操作集中起來定義在一個類中。當該對象結構被很多應用共享時,用訪問者模式讓每個應用僅包含需要用到的操作。
  • 定義對象結構的類很少改變,但經常需要在此結構上定義新的操作。改變對象結構類需要重定義對所有訪問者的接口,這可能需要很大的代價。如果對象結構類經常改變,那么可能還是在這些類中定義這些操作較好。

所涉及的角色:

抽象訪問者 (Abstract Visitor) 角色:聲明一個或者多個訪問操作,形成所有的具體角色所必須實現的接口。

具體訪問者 (Concrete Visitor) 角色:實現抽象訪問者所聲明的接口。

抽象結點 (Abstract Node) 角色:聲明一個接受操作,接受一個訪問者對象作為一個參數。

具體結點 (Concrete Node) 角色:實現抽象元素所規定的的接受的操作。

結構對象( Object Structure )角色:遍歷結構中的所有的元素。
visitor.bmp

?

?