Ist es akzeptabel, dass der Besucher den Zustand des Objekts ändert, in dem er arbeitet? Diese Art von Operation wird nicht als Anti-Patterns betrachtet?Besuchermuster: Objektstatus ändern?
Antwort
Es ist völlig in Ordnung, die besuchten Objekte zu ändern.
Stellen Sie nur sicher, dass Ihre Besucherklasse entsprechend benannt ist, also ist es offensichtlich, dass es einen Nebeneffekt hat.
Ein Beispiel wäre ein Besucher, der jeden Knoten (Monster, Turm, was auch immer) besucht und seine (hier denke ich an ein Spiel) Stärke erhöht zufällig zwischen 25% bis 50%. Das ist ein gültiger Besucher, der mutiert, was er besucht. – mawalker
Solange der Besucher nur die öffentliche Schnittstelle verwendet und keine der Schnittstellenmethoden es dem Besucher erlaubt, das Objekt in einen ungültigen Zustand zu versetzen. Dem Besucher steht es frei, den Zustand des besuchten Objekts zu ändern.
Wie die anderen Antworten erwähnt haben, gibt es kein Anti-Pattern bei der Mutation des Objekts während seines Besuchs; Wie bei allen veränderbaren Zuständen muss jedoch bei Multithread-Szenarien Vorsicht walten. Stellen Sie sicher, dass kein anderer Thread das Objekt zur gleichen Zeit wie der Besucher mutiert, oder stellen Sie eine ordnungsgemäße Synchronisierung sicher.
- 1. OCaml Besuchermuster
- 2. Besuchermuster Erklärung
- 3. Befehlsmuster vs. Besuchermuster
- 4. Erhalten eines Objektstatus
- 5. TransactionScope und Rollback Objektstatus
- 6. Ein allgemeineres Besuchermuster
- 7. Besuchermuster in Python
- 8. Besuchermuster und Rekursion
- 9. Besuchermuster für AST
- 10. Besuchermuster für boost :: any
- 11. Warum das Besuchermuster verwenden?
- 12. Objective-C-Kategorien == Besuchermuster?
- 13. .NET C# Besuchermuster
- 14. Beispiel mit Besuchermuster
- 15. Unit Testing Besuchermuster Architektur
- 16. Welche Ausnahme wird auf ungültigen Objektstatus geworfen?
- 17. Behalten Sie einen Objektstatus in verschiedenen Läufen
- 18. Wie kombiniert C# Task.WaitAll() Objektstatus zu einem?
- 19. Bricht ein Stapelstatus im Besucher das Besuchermuster?
- 20. CMIS Besuchermuster zum Kopieren von Ordnerstruktur Multithread?
- 21. Verwenden von Enums und wechseln statt Besuchermuster
- 22. Reflexion Perfect Forwarding und das Besuchermuster
- 23. Bildverarbeitung in iOS, um einen Objektstatus zu erhalten
- 24. Wie initiiere ich den Objektstatus bei seiner Erstellung?
- 25. Besuchermuster für const und nonconst Versionen eines Baumes
- 26. Java Enums - Switch Statements vs Besuchermuster auf Enums - Leistungsvorteile?
- 27. Besuchermuster in Ruby, oder einfach einen Block verwenden?
- 28. Wie man Besuchermuster für einen abstrakten Syntaxbaum in C# schreibt?
- 29. bevorzugte Methode, um Besuchermuster in dynamischen Sprachen zu implementieren?
- 30. Wie kann das Besuchermuster in einer Hierarchie generischer Klassen am besten verwendet werden?
Wenn ein Besucher mit einem Objekt arbeitet, kann er auf alle öffentlichen Methoden und Eigenschaften zugreifen. Es liegt also an Ihnen, die erforderliche Kapselung des Objekts festzulegen. Der Besucher sollte sowohl auf schreibgeschützte Eigenschaften zugreifen können, um etwas anzuzeigen oder Informationen zu sammeln, als auch den Objektstatus durch Aufruf einer öffentlichen Methode wie MarkVisited() oder Init() ändern. Es sieht aus wie Nutzlast für Besucher –
Es ist hilfreich, wenn Sie keinen Quellcode der Drittanbieter-Klassen haben. Sie können Methoden in Visitor deklarieren und eine gemeinsame Operation hinzufügen, die sich über mehrere verwandte Objekte erstreckt. –