Muster und strukturen klasse 2

So wird die Implementierung der Besuchsmethode sowohl auf der Grundlage des dynamischen Typs des Elements als auch des dynamischen Typs des Besuchers gewählt. Dadurch wird der doppelte Dispatch effektiv implementiert. Für Sprachen, deren Objektsysteme mehrere Dispatche unterstützen, wie z. B. Common Lisp oder C, über die Dynamic Language Runtime (DLR), wird die Implementierung des Besuchermusters erheblich vereinfacht (auch bekannt als Dynamic Visitor), da die Verwendung einer einfachen Funktionsüberlastung für alle besuchten Fälle ermöglicht wird. Ein dynamischer Besucher, sofern er nur mit öffentlichen Daten arbeitet, entspricht dem Open/Closed-Prinzip (da er bestehende Strukturen nicht ändert) und dem Prinzip der einheitlichen Verantwortung (da er das Besuchermuster in einer separaten Komponente implementiert). Angenommen, Sie möchten ein Bestellsystem erstellen, das diese Klassen verwendet. Bestellungen könnten einfache Produkte ohne Verpackung enthalten, sowie Kisten mit Produkten gefüllt… und andere Boxen. Wie würden Sie den Gesamtpreis einer solchen Bestellung bestimmen? In der objektorientierten Programmierung und Software-Engineering ist das Besucher-Design-Muster eine Möglichkeit, einen Algorithmus von einer Objektstruktur zu trennen, auf der es arbeitet. Ein praktisches Ergebnis dieser Trennung ist die Möglichkeit, bestehende Objektstrukturen um neue Operationen hinzuzufügen, ohne die Strukturen zu ändern. Es ist eine Möglichkeit, dem Open/Closed-Prinzip zu folgen.

Stattdessen kann das Besuchermuster angewendet werden. Es kodiert eine logische Operation für die gesamte Hierarchie in eine Klasse, die eine Methode pro Typ enthält. Im CAD-Beispiel wird jede Speicherfunktion als separate Visitor-Unterklasse implementiert. Dadurch würden alle Duplizierungen von Typprüfungen und Durchlaufschritten entfernt. Es würde auch den Compiler beschweren, wenn ein Shape weggelassen wird. Die ursprüngliche Version der Bibliothek basierte auf der Notifier-Klasse, die nur über wenige Felder, einen Konstruktor und eine einzelne Sendemethode verfügte. Die Methode kann ein Nachrichtenargument von einem Client akzeptieren und die Nachricht an eine Liste von E-Mails senden, die über den Konstruktor an den Notifier übergeben wurden. Eine Drittanbieter-App, die als Client fungierte, sollte das Notifierobjekt einmal erstellen und konfigurieren und es dann jedes Mal verwenden, wenn etwas Wichtiges passiert ist. Jeder Benachrichtigungstyp wird als Unterklasse eines Notifiers implementiert. Erstellen Sie eine Blattklasse, um einfache Elemente darzustellen. Ein Programm kann mehrere verschiedene Blattklassen haben. Decorator ist ein strukturelles Entwurfsmuster, mit dem Sie neue Verhaltensweisen an Objekte anfügen können, indem Sie diese Objekte in speziellen Wrapperobjekten platzieren, die das Verhalten enthalten.

Sie könnten den direkten Ansatz ausprobieren: Alle Boxen auspacken, alle Produkte übergehen und dann die Summe berechnen. Das wäre in der realen Welt durchführbar; aber in einem Programm ist es nicht so einfach wie das Ausführen einer Schleife. Sie müssen die Klassen von Produkten und Boxen kennen, die Sie durchlaufen, die Niststufe der Boxen und andere böse Details im Voraus.

Share