訪問者是否可以改變其操作對象的狀態? 這些操作不被視爲反模式?訪客模式:更改對象狀態?
5
A
回答
4
這是完全沒修改已訪問的對象。
只要確保你的訪問者類是適當命名的,所以很明顯,它具有副作用。
+1
一個例子跨越將是誰訪問的每一個節點(怪物,塔,等等),並提高了他們的(我想在這裏比賽的)強度訪客隨機在25%至50%之間。這是一個有效的訪問者,它改變了訪問的內容。 – mawalker
2
只要訪問者只使用公共接口,而且沒有任何的接口方法允許訪問者使對象處於無效狀態。訪問者可以自由改變訪問對象的狀態。
1
至於其他的答案也提到,有一個在變異在訪問期間對象沒有反模式;但與所有可變狀態一樣,必須注意多線程場景。確保沒有其他線程與訪問者同時突變對象,否則確保正確的同步。
相關問題
- 1. 根據對象狀態更改android「sublayout」
- 2. 更改Cocos2d中的對象的狀態
- 3. 通過AJAX更改對象的狀態
- 4. 更改結構對象狀態
- 5. ASP.NET更改會話狀態模式
- 6. 如何安全地更改狀態對象之間的狀態?
- 7. 更改狀態更改的樣式
- 8. Python - 更改對象形狀?
- 9. 訪客中的堆棧狀態是否會破壞訪客模式?
- 10. 靜態方法改變狀態對象
- 11. 訪客模式是否包含一些狀態?
- 12. 如何在節點對象的狀態更改時動態更改JTree視圖?
- 13. 更新div政治家更改對象的狀態
- 14. 訪問Vuex子模塊內部狀態與$存儲對象
- 15. 反應改變狀態嵌入對象
- 16. F#改變對象的狀態
- 17. 如何等待對象改變狀態
- 18. 如何使用狀態模式的對象轉換到下一個狀態?
- 19. 更改bootstrap模態視圖的形狀
- 20. 如何從狀態對象本身不改變狀態?
- 21. 在使用狀態的行爲後改變對象狀態
- 22. RSpec模擬對象和(狀態)變量
- 23. Spring MVC中的模型對象狀態
- 24. Java更改狀態
- 25. WiFi狀態更改
- 26. ObjectContext從分離狀態更新對象
- 27. 處理狀態更新對象
- 28. 當觀察者修改對象狀態時使用觀察者模式
- 29. 針對GPS狀態更改的操作
- 30. 動態更改CF7狀態
作爲遊客與工作對象可以訪問任何公開的方法和屬性。因此,您需要設置所需的對象封裝。訪問者應該既可以訪問只讀屬性以顯示某些內容或收集信息,也可以通過調用像MarkVisited()或Init()這樣的公共方法更改對象狀態。它看起來像訪問者的有效載荷 –
當你沒有第三方類的源代碼時,這很有幫助。您可以在訪客申報方法和添加一個共同的一個操作,在多個相關對象 –