Bevor Sie mir sagen, dass es bereits eine ähnliche Frage ist, ja, ich weiß, ich habe it gelesen. Aber die Frage konzentriert sich auf , wenn, interessiert mich warum.Ein guter Grund, das Visitor-Designmuster zu verwenden?
Ich bekomme, wie die Dinge funktionieren. Der klassische Tier, Hund, Katze Beispiel funktioniert immer wie ein Charme.
Die Sache ist diesem Code
int main()
{
Cat c;
Sound theSound;
c.letsDo(&theSound);
}
scheint mir so unnatürlich. Warum?
ich meine, ja, auf diese Weise ich meinen Hund und Katze Modelle undifferenziertes habe (erstes Mal, dass ich dieses Wort in Englisch btw verwenden), weil die wirkliche implentation unter der Sound-Klasse versteckt ist, aber nicht, dass nur ein Weg, um deinen Code zu beschweren? Ist Polymorphismus nicht genug, um so etwas zu tun?
Für mich ist der Unterschied, dass mit Polymorphie Sie jede Klasse bearbeiten müssen (aber das Modell bleibt gleich, oder?), Während Sie nur eine Klasse mit dem Besucherentwurfsmuster bearbeiten müssen.
Genau kann das Verhalten von einer dritten Partei implementiert werden. –
Ok, aber wenn Sie Parser für SQL definieren, haben Sie nicht schon Ihre Grammatikdefinition? Wo sind die unerwarteten Anwendungsfälle? Eigentlich, da wir über das Parsing sprechen, sollte kein Parser-Generator ein passenderes Beispiel sein? Dort haben Sie eine willkürliche Grammatik, dann müssen Sie eine generische Tree-Walker-Klasse definieren. – dierre
Es geht nicht um die Struktur des SQL. Es geht darum, wie der Client das Ergebnis/die Ausgabe Ihrer Bibliothek verwenden kann. Das Parser-Beispiel wird einfach verwendet, weil es etwas "klassisch" ist. Übrigens, wenn Sie eine vollständig generische API (beliebige "DOM" -ähnliche Knoten) ohne eine feste Struktur haben, könnten Sie besser mit dem generischen Accessor-Ansatz anstatt mit dem Besucher-Muster arbeiten. – Dirk