introduire
Le mode de commande est défini comme: utilisé pour encapsuler une demande dans un objet, afin que vous puissiez paramétrer le client avec différentes demandes; Demandes de file d'attente ou de journal et effectuer des opérations révocables. En d'autres termes, le mode de modification est conçu pour encapsuler l'appel, la demande et le fonctionnement d'une fonction en un seul objet, puis effectuer une série de traitement sur l'objet. De plus, l'objet de commande et l'objet récepteur peuvent être découplés en appelant des objets qui implémentent des fonctions spécifiques.
texte
Montrons ce modèle via le programme d'achat de véhicules, définissant d'abord la classe d'opération spécifique de l'achat de véhicules:
La copie de code est la suivante:
$ (function () {
var carmanager = {
// demande des informations
requestInfo: function (modèle, id) {
Renvoie «les informations pour» + modèle +
'avec id' + id + 'est foobar';
},
// Acheter une voiture
BuyVeHicle: fonction (modèle, id) {
Retour 'Vous avez acheté avec succès l'article'
+ id + ', un modèle' +;
},
// Organisez la vue
arrangementViewing: fonction (modèle, id) {
Retour 'Vous avez réussi à réserver une vue de'
+ modèle + '(' + id + ')';
}
};
}) ();
Jetons un coup d'œil au code ci-dessus. Nous exécutons simplement les commandes Manager en appelant des fonctions. Cependant, dans certains cas, nous ne voulons pas appeler directement des méthodes à l'intérieur de l'objet. Cela augmentera la dépendance entre les objets. Élargissons maintenant ce carmanager pour accepter les demandes de traitement des objets Carmanager, y compris le modèle et l'ID de voiture. Selon la définition du modèle de commande, nous espérons implémenter les appels de fonction suivants:
La copie de code est la suivante:
Carmanager.Exécute ({CommandType: "BuyVeHicle", Operand1: 'Ford Escort', Operand2: '453543'});
Selon cette exigence, nous pouvons mettre en œuvre la méthode CarManager.Exécute de cette manière:
La copie de code est la suivante:
Carmanager.execute = fonction (commande) {
return CarManager [Command.Request] (Commode.Model, Command.Carid);
};
Après la transformation, l'appel est beaucoup plus simple et les appels suivants peuvent être mis en œuvre (bien sûr, certains détails d'exception doivent encore être améliorés):
La copie de code est la suivante:
Carmanager.excute ({request: "arrangeViewing", modèle: 'Ferrari', carid: '145523'});
Carmanager.execute ({request: "requestInfo", modèle: 'Ford Mondeo', Carid: '543434'});
Carmanager.execute ({request: "requestInfo", modèle: 'Ford Escort', carid: '543434'});
Carmanager.execute ({request: "BuyVeHicle", modèle: 'Ford Escort', Carid: '543434'});
Résumer
Le mode de commande est plus facile à concevoir une file d'attente de commandes, et il est plus facile de compter les commandes dans le journal si nécessaire, et permet à la partie qui accepte la demande de décider de l'appeler, et peut également implémenter la révocation et la réinitialisation de la demande. De plus, comme les classes spécifiques ajoutées n'affectent pas d'autres classes, il est facile à mettre en œuvre.
Mais le principe du développement agile nous dit de ne pas ajouter de fonctions basées sur des suppositions et réellement indésirables au code. Si vous ne savez pas si un système a besoin d'un mode de commande, vous ne devez généralement pas vous précipiter pour l'implémenter. En fait, il n'est pas difficile d'implémenter ce mode lorsqu'il est nécessaire. Il est uniquement significatif de refactoriser le code d'origine en un mode de commande lorsqu'il est vraiment requis, tel que l'annulation, la restauration des opérations et d'autres fonctions.