Muster zuordnen tms strategie

Das ursprüngliche Objekt, der als Kontext bezeichnet wird, enthält einen Verweis auf ein Strategieobjekt und delegiert es für die Ausführung des Verhaltens. Um die Art und Weise zu ändern, wie der Kontext seine Arbeit ausführt, können andere Objekte das aktuell verknüpfte Strategieobjekt durch ein anderes ersetzen. In unserem Design Patterns Course ist eines der Muster, die wir im Detail betrachten, das Strategiemuster. Es ist ein einfaches Muster, hat aber eine so breite Anwendung, dass es sich lohnt, genau zu untersuchen. Der erste Teil der Diskussion umfasst die Konvertierung von vorhandenem Code in dieses Muster, das allgemein als Switch- oder Multi-Conditional-Anweisungen erkannt wird. Der zweite Teil dreht sich um die Umwandlung des intrinsischen Zustands in Extrinsik, um es uns zu ermöglichen, Strategieobjekte zwischen verschiedenen Kontexten zu teilen. Mit der Strategie kann der Algorithmus unabhängig von Clients variieren, die ihn verwenden. [2] Strategie ist eines der Muster des einflussreichen Buches Design Patterns von Gamma et al.[3], das das Konzept der Verwendung von Designmustern populär machte, um zu beschreiben, wie man flexible und wiederverwendbare objektorientierte Software entwirft. Durch das Aufschieben der Entscheidung darüber, welcher Algorithmus verwendet werden soll, bis zur Laufzeit kann der aufrufende Code flexibler und wiederverwendbarer werden. Um die ursprüngliche Switch-Anweisung in eine Strategie zu konvertieren, definieren wir zunächst die TaxStrategy-Schnittstelle: Im obigen UML-Klassendiagramm implementiert die Context-Klasse keinen Algorithmus direkt. Stattdessen bezieht sich Context auf die Strategieschnittstelle zum Ausführen eines Algorithmus (strategy.algorithm()), wodurch Context unabhängig von der Implementierung eines Algorithmus ist.

Die Klassen Strategy1 und Strategy2 implementieren die Strategieschnittstelle, d. h. implementieren (kapseln) einen Algorithmus. Das UML-Sequenzdiagramm zeigt die Laufzeitinteraktionen: Das Context-Objekt delegiert einen Algorithmus an verschiedene Strategieobjekte. Zunächst ruft Context algorithm() für ein Strategy1-Objekt auf, das den Algorithmus ausführt und das Ergebnis an Context zurückgibt. Danach ändert Context seine Strategie und ruft algorithm() für ein Strategy2-Objekt auf, das den Algorithmus ausführt und das Ergebnis an Context zurückgibt. Dynamische Tagesplanung kann erhebliche Kostenvorteile erzielen, insbesondere für Vorgänge, bei denen es kein regelmäßiges tägliches Liefermuster gibt (z. B. Hauslieferungen, plötzliche Änderungen der Pläne).

Die wöchentliche Terminplanung ist für Lieferketten besser geeignet, wenn der Transportplaner den geplanten Lieferbedarf für mindestens eine Woche im Voraus kennt. Für Multi-Delivery-Organisationen können Lieferungen manuell Kunden oder dem asw:maximus zugeordnet werden – TMS kann diese je nach Kosteneffizienz zuordnen. In der Regel speichert das Strategiemuster einen Verweis auf code in einer Datenstruktur und ruft ihn ab. Dies kann durch Mechanismen wie den systemeigenen Funktionszeiger, die erstklassige Funktion, Klassen oder Klasseninstanzen in objektorientierten Programmiersprachen oder den Zugriff auf die interne Speicherung von Code der Sprachimplementierung über Reflektion erreicht werden. Gemäß dem Strategiemuster sollten die Verhaltensweisen einer Klasse nicht vererbt werden. Stattdessen sollten sie mithilfe von Schnittstellen gekapselt werden. Dies ist mit dem Open/Closed-Prinzip (OCP) vereinbar, das vorschlägt, dass Klassen für die Erweiterung geöffnet, aber für Änderungen geschlossen werden sollten. Beispielsweise kann eine Klasse, die die Validierung für eingehende Daten durchführt, das Strategiemuster verwenden, um einen Validierungsalgorithmus auszuwählen, der vom Datentyp, der Quelle der Daten, der Benutzerauswahl oder anderen diskriminierenden Faktoren abhängt.