È accettabile che il visitatore cambi lo stato dell'oggetto in cui opera? Questo tipo di operazione non è considerato come anti-pattern?Modello visitatore: modifica lo stato dell'oggetto?
risposta
È assolutamente necessario modificare gli oggetti visitati.
Assicurati solo che la classe visitatore sia denominata in modo appropriato, quindi è ovvio che ha un effetto collaterale.
Un esempio potrebbe essere un visitatore che visita ogni nodo (mostro, torre, qualsiasi cosa) e aumenta la forza (sto pensando a un gioco qui) a caso tra il 25% e il 50%. Quello è un visitatore valido che muta ciò che visita. – mawalker
Fintantoché il visitatore utilizza solo l'interfaccia pubblica e nessuno dei metodi di interfaccia consente al visitatore di mettere l'oggetto in uno stato non valido. Il visitatore è libero di cambiare lo stato dell'oggetto visitato.
Come hanno già detto le altre risposte, non c'è anti-pattern nel mutare l'oggetto durante la sua visita; ma come con tutti gli stati mutabili, bisogna fare attenzione negli scenari multi-thread. Assicurati che nessun altro thread stia mutando l'oggetto nello stesso momento del visitatore, oppure assicurati che la sincronizzazione sia corretta.
- 1. Modello visitatore + Principio aperto/chiuso
- 2. Modello visitatore in Scala
- 3. Modello visitatore in pitone
- 4. Alternativa al modello di visitatore?
- 5. modello visitatore per boost :: any
- 6. Modello visitatore Java invece di instanceof switch
- 7. Modello visitatore ANTLR4 su semplice esempio aritmetico
- 8. Implementazione del modello di visitatore in C#
- 9. Modifica lo stato CheckBox sulla voce Elenco fai clic?
- 10. Mantenere lo stato di ingresso software/IME su Modifica dell'orientamento
- 11. Modifica modello di dati dinamicamente
- 12. qual è la differenza tra modello di visitatore e strategia?
- 13. Dipendenza ciclica nel modello di progettazione del visitatore
- 14. Viste parziali ASP.Net MVC che mantengono lo stato del modello?
- 15. Rails JS Response, rende sia lo stato che il modello?
- 16. Stato modello non valido
- 17. Modifica stato di commutazione Android
- 18. Modifica modello javadoc IntelliJ
- 19. come usare il visitatore antlr4
- 20. Android Marshmallow - modifica stato autorizzazioni
- 21. Modifica modello Rails da Command Line
- 22. Django modello di modifica Disegno
- 23. Modifica del modello dell'interfaccia dell'attrezzo
- 24. Qual è lo stato della lingua Javascript?
- 25. Lo stato esistente dei pacchetti è stato scartato
- 26. Chi definisce le transizioni di stato nel modello di stato?
- 27. AssociationTypeMismatch per lo stesso modello
- 28. Come implementare il pattern visitatore in javascript?
- 29. Riduttori redux: modifica dello stato profondamente annidato
- 30. Lo stato di GMaps v3
Poiché il visitatore utilizza l'oggetto, può accedere a qualsiasi metodo e proprietà pubblici. Quindi spetta a te impostare l'incapsulamento obbligatorio dell'oggetto. Il visitatore dovrebbe essere in grado sia di accedere alle proprietà di sola lettura per visualizzare qualcosa o raccogliere informazioni, sia di modificare lo stato dell'oggetto tramite chiamata di un metodo pubblico come MarkVisited() o Init(). Sembra un carico utile per il visitatore –
È utile quando non si dispone del codice sorgente delle classi di terze parti. È possibile dichiarare metodi in Visitor e aggiungere un'operazione comune, che si estende su più oggetti correlati –