2015-12-30 74 views
5

訪問者是否可以改變其操作對象的狀態? 這些操作不被視爲反模式?訪客模式:更改對象狀態?

+0

作爲遊客與工作對象可以訪問任何公開的方法和屬性。因此,您需要設置所需的對象封裝。訪問者應該既可以訪問只讀屬性以顯示某些內容或收集信息,也可以通過調用像MarkVisited()或Init()這樣的公共方法更改對象狀態。它看起來像訪問者的有效載荷 –

+0

當你沒有第三方類的源代碼時,這很有幫助。您可以在訪客申報方法和添加一個共同的一個操作,在多個相關對象 –

回答

4

這是完全沒修改已訪問的對象。

只要確保你的訪問者類是適當命名的,所以很明顯,它具有副作用。

+1

一個例子跨越將是誰訪問的每一個節點(怪物,塔,等等),並提高了他們的(我想在這裏比賽的)強度訪客隨機在25%至50%之間。這是一個有效的訪問者,它改變了訪問的內容。 – mawalker

2

只要訪問者只使用公共接口,而且沒有任何的接口方法允許訪問者使對象處於無效狀態。訪問者可以自由改變訪問對象的狀態。

1

至於其他的答案也提到,有一個在變異在訪問期間對象沒有反模式;但與所有可變狀態一樣,必須注意多線程場景。確保沒有其他線程與訪問者同時突變對象,否則確保正確的同步。