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

適用性:

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

所涉及的角色:

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

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

抽象結(jié)點(diǎn) (Abstract Node) 角色:聲明一個(gè)接受操作,接受一個(gè)訪問者對象作為一個(gè)參數(shù)。

具體結(jié)點(diǎn) (Concrete Node) 角色:實(shí)現(xiàn)抽象元素所規(guī)定的的接受的操作。

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

?

?