Strom kuendigung Muster

So wie es Zeiten gibt, in denen der Besucher das richtige Muster zu verwenden ist, gibt es Zeiten, in denen es das falsche Muster ist. Wenn Ihre Daten nicht unterschiedlich sind, wird das Besuchermuster praktisch nutzlos, da nur ein einziger Versand erforderlich ist. Auch, wenn Sie jemals nur die Implementierung eines einzelnen Besuchers voraussehen, dann kann das Besuchermuster für Ihre Bedürfnisse zu viel sein. Das Besuchermuster glänzt wirklich, wenn Sie mehrere verschiedene Besucher benötigen, da Sie ihre Logik richtig einkapseln können. Ich bin ein großer Befürworter der Verwendung von Designmustern, wann immer sie das richtige Werkzeug für den Job sind. Eines der Designmuster, die ich heutzutage ziemlich häufig aus der Toolbox ziehe, ist das Besucher-Design-Muster. Es ist jedoch nicht eines der gebräuchlicheren Muster, über die viele Menschen bloggen. Also möchte ich es mit einigen realen Beispielen abdecken, wie ich es verwenden. Bevor Sie sich hinter dem Besuchermuster mit Code befassen, ist es am besten, die Probleme zu verstehen, die dieses Muster bei der Lösung aufstellt.

In C++ (und vielen ähnlichen OO-Sprachen) haben Sie eine so genannte Single-Dispatch-Semantik für Methodenaufrufe. Welche Methode aufgerufen wird, basiert auf der vtable des Klasseninstanzobjekts für die aufgerufene Methode. Wenn Sie einen Ausdruck wie foo.bar(x) haben, wird der dynamische Typ von foo verwendet, um zu bestimmen, welche Methodenleiste aufgerufen wird. Funktionen können basierend auf dem statischen Typ von x überladen werden, um verschiedene Versionen der bar-Methode aufzurufen. Diese Überladung erfolgt jedoch zum Zeitpunkt der Kompilierung. Der Compiler generiert verschiedene interne Namen für Funktionen basierend auf den Parameterinformationen. So zum Beispiel gegeben: Jetzt, da Sie gesehen haben, wie man das Besuchermuster implementiert, und Sie haben einen Anwendungsfall, der zeigt, warum, möchte ich ein letztes Thema behandeln: wie man weiß, wann das Besuchermuster das richtige Werkzeug für den Job ist. Meiner Erfahrung nach ist das Besuchermuster eine großartige Möglichkeit, «Walking»-Probleme zu lösen, bei denen Sie unterschiedliche Datenelemente haben, die Sie auf unterschiedliche Weise verarbeiten möchten. Beispielsweise verfügen Sie in der Compilerarbeit in der Regel über eine Struktur von Knoten, die als «Abstract Syntax Tree, AST» bezeichnet wird. Dieser Knoten stellt den Code des Benutzers in einer Baumstruktur dar. Sie werden diese Struktur mehrmals ausführen, um Arbeiten wie das Erstellen einer Symboltabelle, die semantische Analyse, die Codegenerierung usw. auszuführen.

In diesem Fall haben Sie mehrere Besucher (INodeHandler-Implementierer), um Aktionen für unterschiedliche Daten (die Syntaxknoten) auszuführen. Die Daten müssen jedoch nicht immer baumähnlich sein. Jede Liste von Daten könnte vom Besuchermuster profitieren, solange Sie beabsichtigen, mehrere verschiedene Handler für die Daten zu implementieren. Möglicherweise haben Sie den Nachteil der Verwendung des Besuchermusters bereits erkannt. Wenn Sie eine neue Knotenunterklasse hinzufügen, müssen Sie der Schnittstelle eine neue Methode hinzufügen, und Sie müssen die Funktion Boilerplate Handle implementieren, um die Schnittstellenmethode aufzurufen. Nur dann können Sie die Logik des neuen Knotens innerhalb des Handlers implementieren. Dies kann ein wenig ein belastender Prozess sein, vor allem, wenn Sie ständig neue Knoten hinzufügen. Leider ist dies die Natur des Tieres — um die doppelte Versendung zu bekommen, müssen Sie die doppelte Arbeit zu tun. Wenn Ihr Code jedoch wirklich boilerplate ist, können Sie den Prozess mit einem einfachen Codegenerator oder sogar einigen Makros automatisieren.

Jeder Zweig der kalten, tiefen Strömung wird schließlich im Indischen Ozean oder im nördlichen Teil des Pazifischen Ozeans erwärmt. Obwohl das Wasser immer noch die gleiche Menge salzig enthält, ist es etwas weniger dicht, weil es wärmer ist als das kalte Wasser, das es umgibt; Infolgedessen bewegt er sich nach oben und wird zu einem Oberflächenstrom. Umweltwissenschaftler untersuchen die Ozeanzirkulation, weil die Bewegung des Wassers durch die Ozeane zusammen mit Mustern der Luftbewegung in der Atmosphäre dazu beiträgt, wetter- und klimabedingungen für verschiedene Regionen der Welt zu bestimmen. Die drei Hauptmuster der Ozeanzirkulation sind Kreisel, Aufwelling und thermohaline Zirkulation.