einführen
Der Befehlsmodus wird definiert als: Wird verwendet, um eine Anforderung in ein Objekt zu verkapulieren, damit Sie den Client mit unterschiedlichen Anforderungen parametrisieren können. Warteschlange oder Protokollanforderungen und widerrufliche Vorgänge durchführen. Mit anderen Worten, der Änderungsmodus ist so konzipiert, dass der Aufruf, die Anforderung und den Betrieb einer Funktion in ein einzelnes Objekt zusammengefasst und dann eine Reihe von Verarbeitungen auf dem Objekt durchgeführt wird. Darüber hinaus kann das Befehlsobjekt und das empfangende Objekt durch Aufrufen von Objekten, die bestimmte Funktionen implementieren, entkoppelt werden.
Text
Zeigen wir dieses Muster über das Fahrzeugkaufprogramm und definieren Sie zunächst die spezifische Betriebsklasse des Fahrzeugkaufs:
Die Codekopie lautet wie folgt:
$ (function () {
var carmanager = {
// Informationen anfordern
RequestInfo: Funktion (Modell, ID) {
Geben Sie 'die Informationen für' + Modell + zurück
'mit id' + id + 'ist foobar';
},
// ein Auto kaufen
BuyVehicle: Funktion (Modell, ID) {
Rückgabe "Sie haben erfolgreich Artikel gekauft"
+ id + ', ein' + Modell;
},
// Ansicht organisieren
ArrangementViewing: Funktion (Modell, ID) {
Return 'Sie haben erfolgreich eine Sichtweise gebucht "
+ Modell + '(' + id + ')';
}
};
}) ();
Schauen wir uns den obigen Code an. Wir führen einfach Manager -Befehle aus, indem wir Funktionen aufrufen. In einigen Fällen möchten wir jedoch keine direkten Methoden innerhalb des Objekts aufrufen. Dies erhöht die Abhängigkeit zwischen Objekten. Erweitern wir diesen Carmmanager nun, um alle Verarbeitungsanforderungen von Carmanager -Objekten wie Modell- und CAR -ID zu akzeptieren. Nach der Definition des Befehlsmusters hoffen wir, die folgenden Funktionsaufrufe zu implementieren:
Die Codekopie lautet wie folgt:
Carmanager.execute ({commandtype: "buyVehicle", Operand1: 'Ford Escort', Operand2: '453543'});
Nach dieser Anforderung können wir die Carmanager.execute -Methode auf diese Weise implementieren:
Die Codekopie lautet wie folgt:
Carmanager.execute = function (command) {
return carmanager [command.request] (command.model, command.carid);
};
Nach der Transformation ist der Anruf viel einfacher, und die folgenden Anrufe können implementiert werden (natürlich müssen einige Ausnahmetails noch verbessert werden):
Die Codekopie lautet wie folgt:
Carmanager.execute ({Anfrage: "Arrangviewing", Modell: 'Ferrari', carid: '145523'});
Carmanager.execute ({request: "requestInfo", modell: 'ford mondeo', carid: '543434'});
Carmanager.execute ({Anfrage: "RequestInfo", Modell: 'Ford Escort', carid: '543434'});
Carmanager.execute ({Anfrage: "buyVehicle", Modell: 'Ford Escort', carid: '543434'});
Zusammenfassen
Der Befehlsmodus ist leichter zu entwerfen und es ist einfacher, Befehle bei Bedarf in das Protokoll zu zählen, und ermöglicht es der Partei, die die Anfrage akzeptiert, zu entscheiden, ob sie es aufrufen soll, und kann auch den Widerruf und das Zurücksetzen der Anfrage implementieren. Da die hinzugefügten bestimmten Klassen andere Klassen nicht beeinflussen, ist sie einfach einfach zu implementieren.
Das Prinzip der agilen Entwicklung sagt uns jedoch, dass wir dem Code keine ratenbasierten und tatsächlich unerwünschten Funktionen hinzufügen sollen. Wenn Sie nicht sicher sind, ob ein System einen Befehlsmodus benötigt, sollten Sie es im Allgemeinen nicht beeilen, es zu implementieren. Tatsächlich ist es nicht schwierig, diesen Modus zu implementieren, wenn er erforderlich ist. Es ist nur sinnvoll, den ursprünglichen Code in einen Befehlsmodus umzusetzen, wenn er wirklich erforderlich ist, z. B. das Rückgängigmachen, die Wiederherstellung von Operationen und andere Funktionen.