2015-12-30 8 views
5

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?

+0

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 –

+0

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. –

Antwort

4

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.

+1

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

2

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.

1

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.

Verwandte Themen