Patrons comportementaux
Les patrons comportementaux s’occupent des algorithmes et de la répartition des responsabilités entre les objets.
![Chaîne de responsabilité](/images/patterns/cards/chain-of-responsibility-mini.png?id=36d85eba8d14986f053123de17aac7a7)
Permet de faire circuler une demande dans une chaîne de handlers. Lorsqu'un handler reçoit une demande, il décide de la traiter ou de l’envoyer au handler suivant de la chaîne.
![Commande](/images/patterns/cards/command-mini.png?id=b149eda017c0583c1e92343b83cfb1eb)
Prend une action à effectuer et la transforme en un objet autonome qui contient tous les détails de cette action. Cette transformation permet de paramétrer des méthodes avec différentes actions, planifier leur exécution, les mettre dans une file d’attente ou d’annuler des opérations effectuées.
![Itérateur](/images/patterns/cards/iterator-mini.png?id=76c28bb48f997b36965983dd2b41f02e)
Permet de parcourir les éléments d’une collection sans révéler sa représentation interne (liste, pile, arbre, etc.).
![Médiateur](/images/patterns/cards/mediator-mini.png?id=a7e43ee8e17e4474737b1fcb3201d7ba)
Permet de diminuer les dépendances chaotiques entre les objets. Ce patron restreint les communications directes entre les objets et les force à collaborer uniquement via un objet médiateur.
![Mémento](/images/patterns/cards/memento-mini.png?id=8b2ea4dc2c5d15775a654808cc9de099)
Permet de sauvegarder et de rétablir l'état précédent d’un objet sans révéler les détails de son implémentation.
![Observateur](/images/patterns/cards/observer-mini.png?id=fd2081ab1cff29c60b499bcf6a62786a)
Permet de mettre en place un mécanisme de souscription pour envoyer des notifications à plusieurs objets, au sujet d’événements concernant les objets qu’ils observent.
![État](/images/patterns/cards/state-mini.png?id=f4018837e0641d1dade756b6678fd4ee)
Modifie le comportement d’un objet lorsque son état interne change. L’objet donne l’impression qu’il change de classe.
![Stratégie](/images/patterns/cards/strategy-mini.png?id=d38abee4fb6f2aed909d262bdadca936)
Permet de définir une famille d’algorithmes, de les mettre dans des classes séparées et de rendre leurs objets interchangeables.
![Patron de méthode](/images/patterns/cards/template-method-mini.png?id=9f200248d88026d8e79d0f3dae411ab4)
Permet de mettre le squelette d’un algorithme dans la classe mère, mais laisse les sous-classes redéfinir certaines étapes de l’algorithme sans changer sa structure.
![Visiteur](/images/patterns/cards/visitor-mini.png?id=854a35a62963bec1d75eab996918989b)
Permet de séparer les algorithmes et les objets sur lesquels ils opèrent.