La Chaîne de responsabilité est un patron de conception comportemental qui permet de faire circuler une demande tout au long d’une chaîne de handlers, jusqu’à ce que l’un d’entre eux la traite.
Ce patron permet à plusieurs objets de traiter une demande sans coupler la classe du demandeur aux classes concrètes des récepteurs. La chaîne peut être assemblée dynamiquement à l’exécution à l’aide de tout handler implémentant l’interface standard des handlers.
Exemples d’utilisation : La chaîne de responsabilité n’est pas souvent invitée dans les programmes Java, car son intérêt réside dans la gestion du chaînage.
Elle est plus souvent utilisée lorsque l’on veut faire remonter des événements vers les composants parents dans les classes d’une interface utilisateur graphique. Elle est également utilisée dans les filtres d’accès séquentiels.
Voici quelques exemples tirés des bibliothèques principales de Java :
Identification : Ce patron peut être reconnu grâce aux méthodes comportementales d’un groupe d’objets qui appellent indirectement les mêmes méthodes dans d’autres objets, et tous suivent la même interface.
Filtrer les accès
Dans cet exemple, vous pouvez voir comment une demande composée de données utilisateur va parcourir une chaîne de handlers et lancer divers traitements tels que l’authentification, l’autorisation et la validation.
Cet exemple diffère légèrement de ceux que vous retrouverez chez les autres auteurs, beaucoup plus canoniques. La majorité des exemples pour ce patron sont construits dans l’idée de rechercher le bon handler, l’exécuter, puis de sortir de la chaîne. Mais ici, nous exécutons chaque handler jusqu’à ce que l’un d’entre eux ne puisse pas traiter la demande. Nous sommes toujours en présence du patron chaîne de responsabilité, même si le déroulement est légèrement différent.
middleware
middleware/Middleware.java: Interface de validation basique
middleware/ThrottlingMiddleware.java: Vérifier la limite du nombre de demandes
middleware/UserExistsMiddleware.java: Vérifier les identifiants de l’utilisateur
middleware/RoleCheckMiddleware.java: Vérifier le rôle de l’utilisateur