Définition: Le modèle de la chaîne de responsabilité crée une chaîne de l'objet récepteur pour la demande. Ce modèle donne le type de demande, découplant l'expéditeur et le récepteur de la demande. Ce type de motif de conception appartient au modèle de comportement. Dans ce mode, chaque destinataire contient généralement une référence à un autre destinataire. Si un objet ne peut pas traiter la demande, il transmet la même demande au récepteur suivant, etc.
Caractéristiques: 1. Réduire le degré de couplage. Il découple l'expéditeur et le récepteur de la demande.
2. Simplifié l'objet. Cela rend l'objet qui n'est pas nécessaire pour connaître la structure de la chaîne.
3. Améliorez la flexibilité pour attribuer des responsabilités à la cible. En modifiant les membres dans la chaîne ou en mobilisant leur commande, il permet un ajout dynamique ou une suppression des responsabilités.
4. Il est très pratique d'ajouter de nouvelles classes de traitement de demande.
Applications dans le développement au niveau de l'entreprise et les cadres couramment utilisés: ressort, intercepteur de jambes de force, filtre servlet
Exemples spécifiques:
/ ** * Voici un exemple de congé d'une entreprise: * 1. Quelqu'un prend congé (événement) * 2. Approbation du chef de l'équipe de projet: l'approbation peut être approuvée moins de trois jours et demande aux supérieurs plus de trois jours * 3. Approbation du superviseur du département: l'approbation peut être approuvée moins de dix jours et demande aux supérieurs plus de dix jours * 4. Approbation du directeur général: l'approbation peut être approuvée moins de 30 jours et n'approuve pas plus de 30 jours * / classe publique Demo {public static void Main (String [] args) {event event = nouvel événement ("programmeur", 32, "retour dans la ville natale pour visiter les parents"); Leader a = nouveau groupleader ("Zhang San"); Leader b = nouveau manager ("li si"); Leader c = new GeneralManager ("Wang Wu"); // Spécifiez le mode de la chaîne de responsabilité a.setNextLeader (b); B.SetNextLeader (C); A.Handler (événement); }} / ** * Objet de l'événement, événements de traitement spécifiques dans la chaîne de responsabilité * Cette instance est la question de demander l'événement de congé * / class {nom de chaîne privée; Journées privées de l'INT; Raison de chaîne privée; Événement public (nom de chaîne, Int Days, String Reason) {Super (); this.name = name; this.days = jours; ce.reason = raison; } public String getName () {Nom de retour; } public void setName (string name) {this.name = name; } public int getdays () {jours de retour; } public void Setdays (int jours) {this.days = jours; } public String getReason () {Retour Raison; } public void setReason (String Reason) {this.reason = raisonnement; }} / ** * Objet de chaîne de responsabilité abstrait, tous les objets de chaîne de responsabilité réels qui suivent sont hérités de cet objet * / Résumé Classe leader {nom de chaîne privé; Leader protégé NextLeader; // L'objet de responsabilité suivante dans la chaîne de responsabilité, c'est la base pour garder le leader public de la chaîne de responsabilité (nom de la chaîne) {super (); this.name = name; } public void setNextLeader (leader nextleader) {this.nextLeader = nextLeader; } public String getName () {Nom de retour; } public void setName (string name) {this.name = name; } Handler de void abstract protégé (événement d'événement);} / ** * Le premier objet du processus de départ, leader de groupe * / class Groupleader étend le leader {public groupleader (nom de chaîne) {super (nom); } Protected void Handler (événement Event) {if (event.getDays () <3) { System.out.println ("------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- Raison du congé: "+ event.getReason () +" | "); System.out.println ("approbateur:" + this.getName () + "(Group Leader), pass!"); System.out.println (); } else {System.out.println (this.getName () + "(superviseur), pas d'autorisations!"); this.nextLeader.Handler (événement); }}} / ** * Le deuxième objet dans le processus de Leave, Manager du département * / Class Manager étend le leader {public Manager (String Name) {super (name); } Protected void Handler (événement Event) {if (event.getDays () <10) { System.out.println ("--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- System.out.println (this.getName () + "(directeur général), pas de autorisation!"); 30){ System.out.println("------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ offender: "+ event.getName () +" | "); System.out.println (" Nombre de jours de congé: "+ event.getDays () +" Days "+" | "); System.out.println (" | Raison de congé: "+ event.getReason () +" | "); System.out.println (" approvers: "+ this.getName () +" (General Manager) "); System.out.Println ();} System.out.println("-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- The leave requester: "+ event.getName () +" | "); System.out.println (" Nombre de jours de congé: "+ event.getDays () +" Days "+" | "); System.out.println (" | Raison pour le congé: "+ event.getReason () +" | "); System.out.print) "); System.out.println ();}}}Le modèle de chaîne de responsabilité est principalement utilisé pour le développement tel que le contrôle des processus. Par rapport au modèle IF-Else, il a une efficacité plus élevée dans la modification et l'intégration du code, ce qui est plus propice à la maintenance du code. De plus, lorsqu'il est nécessaire d'ajouter des objets dans la chaîne de responsabilités, nous devons mettre en œuvre une classe de chaîne de responsabilité spécifique, puis créer un objet de responsabilité et maintenir la relation de chaîne de responsabilité, sans frais généraux. De plus, dans la conception réelle, à plusieurs reprises, la maintenance de la chaîne de responsabilité est effectuée dans le fichier de configuration, ce qui permettra de gagner plus de temps de développement.
Ce qui précède est tout le contenu de cet article. J'espère que cela sera utile à l'apprentissage de tous et j'espère que tout le monde soutiendra davantage Wulin.com.