訪問者設計模式Visitor

2021-09-06 22:49:45 字數 1148 閱讀 1099

各個元件可對訪問者暴露自己的細節

訪問者拿著細節去做不同的事情,這些事情是和元件本身可能並無緊密關聯的

將資料結構和資料操作分離

資料結構和資料操作耦合的問題

訪問者模式的應用場景一般需要具備兩個條件:

相對穩定的被訪問者,如資料結構、工具、元件等,自身具備足夠的屬性和基礎能力

相對靈活可變、不確定的外部使用,對此資料結構、工具、元件的使用。

被訪問者:五金店

所接受的訪問者:帶錢就行

五金店 

}}

訪問者——帶了錢的客戶
一次購物體驗 = new 五金店visitor() 

void 得到繩子(繩子)

//相當於visit 方法

void 開始購物(五金店, 要啥?)

}//購物開始了

一次購物體驗.開始購物(,「錘子」)

舉例總結

五金店有錘子,錘子也可能是乙個element實現,五金店也是,這個看具體實現,對於大體使用場景並不是非常重要。五金店肯定是乙個element,能接受visitor,那麼五金店裡有錘子,而五金店本身並不關心訪問者拿了錘子去幹什麼,給合格的訪問者提供錘子是他的能力而已,對於錘子可以做的比如做板凳、修房子等具體事宜並不是五金店需要負責的東西,而是需要訪問者自己關心的。

訪問者模式有些晦澀難懂,關鍵在於不能明確他的使用場景是什麼,具體的工作中可能得以應用的地方比較少。

使用場景應該適用於那些相對非常穩定的被訪問者,他們可以提供一些基礎能力、基礎屬性,但是因為這些能力、屬性可以做到的事情非常多,又不該是其本身需要面面俱到去負責的。那麼這個時候就需要訪問者(或者我理解也可以說成是使用者),訪問者需要完成什麼複雜的、多變的事情,那麼被訪問者(工具方)提供給你必要的資源、元素,你放手去做,只要你是個合格的訪問者,符合被訪問者的設想(能夠響應你的引數等)即可。

又好像瑞士軍刀,它提供給你各種小工具,使用者要做什麼自己來決定。在程式設計中,如果存在那些比較基層的元件、工具、資料結構,在具體的業務場景中所能(組合)發揮的功能千變萬化,那麼訪問者模式的設計思維應該是適合的。

設計模式 訪問者模式 Visitor

visitor模式表示乙個作用於某物件結構中的各元素的操作。它使你可以在不改變各元素的類的前提下定義作用於這些元素的新操作。類圖 乙個物件結構包含很多類物件,它們有不同的介面,而你想對這些物件實施一些依賴於其具體類的操作。需要對乙個物件結構中的物件進行很多不同的並且不相關的操作,而你想避免讓這些操作...

設計模式 訪問者 Visitor 模式

from 參考 訪問者模式的目的是封裝一些施加於某種資料結構元素之上的操作。一旦這些操作需要修改的話,接受這個操作的資料結構則可以保持不變。第一次這句話時,著實費解。關於對訪問者模式的理解,可以先見下面這個例子,而後再看最後的綜述。比如 你下午請客喝東西,那麼就的考慮好你請的這些人中總會有口味不同,...

設計模式 訪問者模式 Visitor

乙個觀察者,訪問兩個element,concreteelementa 和 concreteelementb,concreteelementa 只有name屬性,所以訪問它是只展示name值,concreteelementb除了name之外,還具有乙個綽號nickname屬性,所以訪問它要展示兩個屬性...