Strategy vs. Visitor

Benutzeravatar
BlackHawk
Nichts ist wie es scheint
Beiträge: 23
Registriert: 27. Okt 2004 19:12

Strategy vs. Visitor

Beitrag von BlackHawk »

Hallo,

eigentlich verfolgen ja Strategy und Decorator das gleiche Ziel.

Trotzdem stelle ich mal die folgende Frage.
(auch auf die Gefahr hin, dass ich evtl. mit heißem Käse erschossen werde...)

Strategy und Visitor sind von ihrer Intention zwar unterschiedlich,
aber könnte man nicht sagen, dass die beiden Patterns dennoch verwandt sind?

Man könnte doch das Strategy-Pattern mittels (Pseudo-)Visitor
etwa so simulieren:
uml.gif
uml.gif (7.08 KiB) 650 mal betrachtet
Je nachdem, welcher Visitor übergeben wird, wird ein anderer Algorithmus ausgeführt.

Danke & Gruß

marcel_b
Nerd
Nerd
Beiträge: 600
Registriert: 31. Okt 2006 17:04
Kontaktdaten:

Re: Strategy vs. Visitor

Beitrag von marcel_b »

Das man das eine irgendwie mit dem anderen hinbekommt ist nicht die Frage... Eher wie schön es ist. Visitor zu einem Goldenen Hammer auszubauen ist nicht soo geschickt :)

1. Strategy vs. Decorator vs. Template wurde in der Vorlesung diskutiert - ich nehme mal an, dass du das nicht meintest, sondern wirklich Visitor?

2. Visitor nimmst du um irgendeine Hierarchie zu traversieren und Daten zu sammeln oder neue Operationen zu implementieren. Strategy ist nicht dafür gedacht vollkommen neue Ops zu definieren sondern nur variable Implementierungen anzubieten.

Wenn du keine Traversierung benötigst, könntest du auch einfach Command nehmen. Dann degeneriert deine Strategy einfach nur zu einem Command und beides ist ähnlich. Aber die Idee hinter Strategy ist eine andere. Der Client soll gar nicht wissen welcher Algorithmus intern verwendet wird. Command und Visitor sind jedoch von außen anzuwenden.

Keine Ahnung ob dir das jetzt hilft, aber wenn nicht musst du wohl mal Code schreiben um den Vorteil zu zeigen. Grundsätzlich würde ich beide Patterns nicht als verwandt bezeichnen.

Viele Grüße
Marcel

Benutzeravatar
BlackHawk
Nichts ist wie es scheint
Beiträge: 23
Registriert: 27. Okt 2004 19:12

Re: Strategy vs. Visitor

Beitrag von BlackHawk »

marcel_b hat geschrieben:Wenn du keine Traversierung benötigst, könntest du auch einfach Command nehmen. Dann degeneriert deine Strategy einfach nur zu einem Command und beides ist ähnlich.
Darf ich davon ausgehen, dass damit gemeint war: Wenn ich keine Traversierung benötige
und statt Visitor Command nehme, dann degeneriert Visitor zu Command und Command und Strategy
sind sich ähnlich!?

marcel_b
Nerd
Nerd
Beiträge: 600
Registriert: 31. Okt 2006 17:04
Kontaktdaten:

Re: Strategy vs. Visitor

Beitrag von marcel_b »

Nein, ich ziehe die Antwort zurück :)

Definition aus Gamma:

Visitor: Represent an OPeration to be performed on the elements of an object structure. Visitor lets you define a new operation wihtout changing the classes of the elements on which it operates.

Command: Encapsulate a request as an object, therby letting you parameterize clients with different requests, queue or log requests, and support undoable operations.

Strategy: Define a family of algorithms, encapsulate each onem and make them interchangeable. Strategy lets the algorithm vary independently from clients that use it.

Template Method: Define a skeleton of an algorithm in an operation, deferring some steps to subclasses...

Wenn du *unbedingt * Ähnlichkeiten suchst, dann eher zwischen Visitor und Command bzw. Strategy und Template Method. Command mit Strategy sollte man nicht vergleichen oder als ähnlich betrachten, da der Intent ein anderer ist (siehe definitionen oben).

Benutzeravatar
BlackHawk
Nichts ist wie es scheint
Beiträge: 23
Registriert: 27. Okt 2004 19:12

Re: Strategy vs. Visitor

Beitrag von BlackHawk »

OK. Vielen Dank!

Antworten

Zurück zu „Archiv“