Absender und empfänger Muster

warum es gesagt wird, es entkoppelt den Absender und den Empfänger Wenn Sie verwirrt sind, denken Sie daran, dass Sie das Mediator-Muster auf andere Weise implementieren können. Sie können z. B. alle Komponenten dauerhaft mit demselben Mediatorobjekt verknüpfen. Diese Implementierung ähnelt nicht Observer, ist aber immer noch eine Instanz des Mediator-Musters. Sie können Visitor als eine leistungsstarke Version des Befehlsmusters behandeln. Seine Objekte können Operationen über verschiedene Objekte verschiedener Klassen ausführen. Der Client erstellt und konfiguriert konkrete Befehlsobjekte. Der Client muss alle Anforderungsparameter, einschließlich einer Empfängerinstanz, an den Konstruktor des Befehls übergeben. Danach kann der resultierende Befehl einem oder mehreren Absendern zugeordnet sein. Obwohl es viele Möglichkeiten gibt, Rückgängig/Wiederholen zu implementieren, ist das Befehlsmuster vielleicht das beliebteste von allen. Meine Kopie des Buches sagt nicht, dass dies das Ziel des Befehlsmusters ist: Ändern Sie die Absender, damit sie den Befehl ausführen, anstatt eine Anforderung direkt an den Empfänger zu senden. Wenn der Kunde den Betonempfänger bereits kennt, dann habe ich das Gefühl, dass dies keine lose Kopplung ist und auch der Client in diesem Fall die APIs (Methoden) direkt auf dem Empfängerobjekt aufrufen kann.

Verwenden Sie das Muster, wenn Sie eine Komponente in einem anderen Programm nicht wiederverwenden können, da sie zu stark von anderen Komponenten abhängig ist. Das Befehlsmuster verwandelt die Anforderung selbst in ein Objekt. Dieses Objekt kann wie andere Objekte gespeichert und übergeben werden. Der Schlüssel zu diesem Muster ist eine Befehlsschnittstelle, die eine Schnittstelle zum Ausführen von Vorgängen deklariert. In ihrer einfachsten Form enthält diese Schnittstelle eine abstrakte Ausführungsoperation. Jede konkrete Command-Klasse gibt ein Empfänger-Aktionspaar an, indem der Receiver als Instanzvariable gespeichert wird. Es stellt verschiedene Implementierungen der execute()-Methode bereit, um die Anforderung aufzurufen. Der Empfänger verfügt über die erforderlichen Kenntnisse, um die Anforderung auszuführen. Andrews Antwort berührt die Tatsache, dass der Logikthread von den Befehlen entkoppelt ist. Sie können die lose Kopplung zwischen Invoker und Command vielleicht besser erkennen, wenn Sie sich auf das Sequenzdiagramm des musters beziehen, das in den Design-Mustern beschrieben wird: Die zentralen Ideen dieses Entwurfsmusters spiegeln die Semantik erstklassiger Funktionen und höherwertigen Funktionen in funktionalen Programmiersprachen genau wider.