Je suis assez nouveau à ce modèle ...Une fonction anonyme est-elle un bon moyen d'implémenter le modèle de commande?
Répondre
Si vous avez des lambdas, vous n'avez pas vraiment besoin de la moitié des "motifs".
Usine? C'est juste une fonction renvoyant de nouveaux objets. Visiteur? Duh! Commander? Fonction anonyme Interprète? Fonction qui prend la chaîne ou peu importe. Stratégie? C'est une fonction!
Ce sont juste des lambdas, des fonctions et des fermetures.
Alors oui, vous pouvez utiliser anonyme (ou autrement nommés) fonctions où vous utilisez le modèle de commande.
Je dirais non, parce qu'une fonction ne peut pas vraiment encapsuler les détails d'une commande, et si elle est anonyme, comment l'appelant et l'appelé peuvent-ils comprendre ce que cela représente?
(Si l'on voulait être pédant, la description GoF du pattern Copmmand décrit spécifiquement l'utilisation d'un objet pour faire l'encapsulation, excluant une implémentation basée sur la fonction, bien que cela soit du nit-picking).
pouvez-vous expliquer cela plus en détail? Quels détails ne peuvent pas être encapsulés? – Iain
Si votre commande ne prend en charge qu'une seule opération, vous pouvez utiliser une fonction anonyme en toute sécurité.
Cependant, il n'est pas rare d'avoir plus d'une opération pour chaque commande. Par exemple. DoCommand/UndoCommand pour annuler/refaire la gestion. Ou CanExecuteCommand/ExecuteCommand pour activer/désactiver les fonctionnalités de l'interface utilisateur pour la commande. Ou quelque chose comme GetLocalizedCommandName. J'utiliserais une interface dans ces cas (au lieu par exemple d'un tuple de fonctions anonymes).
Quelle est la différence entre une fonction lambda et une fonction anonyme? – Iain
Ce sont des synonymes, je suppose. – alamar
Non, il existe de légères différences - http://blogs.msdn.com/ericlippert/archive/2007/01/10/lambda-expressions-vs-anonymous-methods-part-one.aspx –