introducir
El modo de comando se define como: se usa para encapsular una solicitud en un objeto, para que pueda parametrizar al cliente con diferentes solicitudes; cola o solicitudes de registro y realizar operaciones revocables. En otras palabras, el modo de cambio está diseñado para encapsular la llamada, la solicitud y la operación de una función en un solo objeto, y luego realizar una serie de procesamiento en el objeto. Además, el objeto de comando y el objeto receptor se pueden desacoplar llamando a objetos que implementan funciones específicas.
texto
Mostremos este patrón a través del programa de compra de vehículos, primero definiendo la clase de operación específica de compra de vehículos:
La copia del código es la siguiente:
$ (function () {
var carmanager = {
// solicitar información
requestInfo: function (modelo, id) {
Devolver 'la información para' + modelo +
'con id' + id + 'es foobar';
},
// comprar un coche
buyvehicle: function (modelo, id) {
devolver 'ha comprado con éxito artículo'
+ id + ', un modelo' +;
},
// Organizar la vista
ArreglementViewing: function (modelo, id) {
regresar 'Has reservado con éxito una vista de'
+ modelo + '(' + id + ')';
}
};
}) ();
Echemos un vistazo al código anterior. Simplemente ejecutamos los comandos del administrador llamando a funciones. Sin embargo, en algunos casos, no queremos llamar directamente métodos dentro del objeto. Esto aumentará la dependencia entre los objetos. Ahora ampliemos este Carmanager para aceptar cualquier solicitud de procesamiento de los objetos Carmanager, incluidos el modelo y la identificación del automóvil. De acuerdo con la definición del patrón de comando, esperamos implementar las siguientes llamadas de función:
La copia del código es la siguiente:
CarManager.Execute ({comandyPe: "buyvehicle", operand1: 'Ford Escort', operand2: '453543'});
Según este requisito, podemos implementar el método Carmanager.Execute de esta manera:
La copia del código es la siguiente:
Carmanager.execute = function (command) {
return CarManager [Command.Request] (Command.Model, Command.CARID);
};
Después de la transformación, la llamada es mucho más simple, y las siguientes llamadas se pueden implementar (por supuesto, aún deben mejorarse algunos detalles de excepción):
La copia del código es la siguiente:
Carmanager.execute ({request: "ArraneViewing", Model: 'Ferrari', CarID: '145523'});
Carmanager.execute ({request: "requestInfo", Model: 'Ford Mondeo', CarID: '543434'});
Carmanager.execute ({request: "requestInfo", modelo: 'Ford escolta', carid: '543434'});
Carmanager.execute ({request: "buyvehicle", modelo: 'Ford Escort', CarID: '543434'});
Resumir
El modo de comando es más fácil diseñar una cola de comando, y es más fácil contar los comandos en el registro cuando sea necesario, y permite que la parte que acepte la solicitud decida si la llama, y también puede implementar la revocación y restablecer la solicitud. Además, dado que las clases específicas agregadas no afectan a otras clases, es fácil de implementar.
Pero el principio del desarrollo ágil nos dice que no agregemos funciones basadas en conjeturas y en realidad no deseadas al código. Si no está seguro de si un sistema necesita un modo de comando, generalmente no debe apresurarse a implementarlo. De hecho, no es difícil implementar este modo cuando es necesario. Solo es significativo refactorizar el código original en un modo de comando cuando se requiere realmente, como deshacer, restaurar operaciones y otras funciones.