1. Quel est le modèle de chaîne de responsabilité ?
modèle de chaîne de responsabilité (Chain of Responsibility Pattern) est un modèle de conception comportementale. La définition est la suivante :
Évitez de coupler l'expéditeur et le destinataire d'une requête et donnez à plusieurs objets une chance de gérer la requête.
Connectez les objets qui reçoivent la requête dans une chaîne et transmettez la requête le long de cette chaîne jusqu'à ce qu'un objet puisse la gérer.
2. Le rôle du modèle de chaîne de responsabilité
Découplez les requêtes et le traitement des requêtes pour améliorer l’évolutivité du code.
3. Structure du modèle de chaîne de responsabilité
Le modèle de chaîne de responsabilité comprend principalement les rôles suivants :
Rôle de gestionnaire abstrait: définissez une interface pour le traitement des requêtes, y compris des méthodes de traitement abstraites et une connexion ultérieure (chaque gestionnaire de la chaîne a une variable membre pour enregistrer une référence au gestionnaire suivant).
Rôle de manutentionnaire de béton: Implémentez la méthode de traitement du processeur abstrait pour déterminer si la demande peut être traitée. Si la demande peut être traitée, traitez-la, sinon la demande sera transférée à son successeur.
Rôle du client: Créez une chaîne de traitement et soumettez une demande à l'objet gestionnaire spécifique en tête de la chaîne. Il ne se soucie pas des détails du traitement et du processus de livraison des demandes.
Dans le développement actuel, le modèle de chaîne de responsabilité peut ajouter un gestionnaire de chaîne de responsabilité pour gérer des processeurs spécifiques.
4. Application du modèle de chaîne de responsabilité dans le développement réel
Dans SpringBoot, il existe de nombreuses façons de mettre en pratique le modèle de chaîne de responsabilité. Voici un exemple : plusieurs logiques de vérification indépendantes pour un processus de commande.
4.1 Méthode de mise en œuvre 1
Créer Pojo, commander un objet
publicclassOrderContext{privateString seqId;privateString userId;privateLong skuId;privateInteger amount;privateString userAddressId;// Getters and setters}