Question

Je connais très bien le motif de commande, mais je ne comprends pas encore la différence théorique entre un foncteur et une commande. Je pense en particulier aux implémentations Java. Les deux sont en train de programmer des "verbes". représentés sous forme d'objets. Cependant, dans le cas des foncteurs, comme je l'ai vu à partir d'exemples, les implémentations anonymes de classes internes semblent courantes. Quelqu'un peut-il clarifier cela pour moi bien?

Était-ce utile?

La solution

Un foncteur est un concept de "niveau syntaxique" - il intègre le code dans un objet qui peut être traité syntaxiquement comme un pointeur de fonction - c’est-à-dire qu’il peut être "appelé" en mettant entre parenthèses la liste des paramètres. En C ++, vous pouvez transformer une classe en foncteur en remplaçant operator ().

Une commande dans le modèle de commande est un objet qui regroupe certaines fonctionnalités exécutables, mais il n’est pas nécessaire que ce soit un foncteur. Par exemple, il peut s’agir d’une classe qui implémente une interface ICommand, ce qui permet d’exécuter sa commande en appelant Do ().

Autres conseils

Un foncteur est une implémentation, une façon de faire se comporter un objet comme une fonction.

Le "modèle de commande" est un modèle de conception.
Le foncteur est un moyen d'implémenter le "modèle de commande".

Voici la réponse du GOF :

  

Coplien décrit comment implémenter   foncteurs, objets qui sont des fonctions,   en C ++ [Cop92]. Il obtient un diplôme   de la transparence dans leur utilisation par   surcharger l'opérateur d'appel de fonction   (opérateur()). Le modèle de commande est   différent; son objectif est de maintenir   une liaison entre un récepteur et un   fonction (action), pas seulement    maintien d'une fonction .

D'après la description de la page Apache Commons Functor :

Un foncteur est une fonction qui peut être manipulée en tant qu’objet ou en tant qu’objet représentant une seule fonction générique.

Les foncteurs prennent en charge et encouragent un certain nombre de techniques de programmation puissantes, notamment:

  • programmation dans un style fonctionnel
  • fonctions d'ordre supérieur
  • itérateurs internes
  • réutilisation et spécialisation par la composition plutôt que par héritage et surcharge
  • générique " rappel " ou " point d'extension " API
  • générique " filtres " ou des API de prédicats
  • plusieurs " comportements " modèles de conception, tels que visiteur, stratégie, chaîne de responsabilité, etc.

Selon la définition citée par GOF (Gang of Four) (de Comptrol), Functor et Command sont deux motifs différents.

Comme déjà indiqué, Functor représente une classe contenant une méthode de service. En d’autres termes, la responsabilité principale de la classe de foncteur est de stocker la logique spécifique implémentée dans sa propre méthode. On peut donc penser au foncteur comment un conteneur pour la logique interne de sa propre méthode. Historiquement, Functor est né parce que, dans la spécification Java, l’implémentation et / ou le concept de 'fonction de pointeur' n’est pas présent, ce qui est très utile dans le contexte des rappels enregistrés (implémentation spécifique pour le modèle d’observateur).

Le modèle de commande représente un modèle de conception destiné à découpler une entité appelant d'une entité receveuse. Il est principalement utilisé lorsqu'il est nécessaire de décupler les actions (générer les événements) des écouteurs d'actions (penser aux interfaces graphiques). Il dispose d'une méthode responsable de l'exécution d'une opération spécifique (en fonction de la mise en œuvre de la commande particulière à partir de sa propre superclasse) faisant référence à un récepteur d'objet spécifique; dans la définition indiquée, la méthode d'exécution peut être définie comme "non intelligente", en fait, avec une implémentation intelligente, elle pourrait implémenter elle-même la logique opérationnelle au lieu de la déléguer à un troisième objet. Lorsque nous avons une méthode d’exécution intelligente, nous implémentons un foncteur et nous plaçons le foncteur (implémentation de commande spécifique) dans le contexte du modèle de commande.

J'espère que cela vous sera utile.

Je pense qu'un foncteur est un composant du modèle de commande, qui implique également d'autres infrastructures, telles que l'appelant et les destinataires de commandes.

Le modèle de commande est utilisé en Java car nous n'avons pas de fermeture en Java. Functors est une tentative d'implémentation de fermetures.

Une langue avec des fermetures n'a pas besoin du modèle de commande.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top