Definition: Die Kette des Verantwortungsmusters erstellt eine Kette des Empfängerobjekts für die Anforderung. Dieses Muster enthält die Art der Anforderung, die den Absender und den Empfänger der Anforderung entkoppelt. Diese Art von Entwurfsmuster gehört zum Verhaltensmuster. In diesem Modus enthält normalerweise jeder Empfänger einen Verweis auf einen anderen Empfänger. Wenn ein Objekt die Anforderung nicht verarbeiten kann, übergibt es dieselbe Anforderung an den nächsten Empfänger und so weiter.
Merkmale: 1. Kopplungsgrad reduzieren. Es entkoppelt den Absender und den Empfänger der Anfrage.
2. vereinfacht das Objekt. Dies macht das Objekt nicht notwendig, um die Struktur der Kette zu kennen.
3.. Verbessern Sie die Flexibilität, dem Ziel Verantwortlichkeiten zuzuweisen. Indem Sie die Mitglieder in der Kette ändern oder ihre Bestellung mobilisieren, ermöglicht es eine dynamische Addition oder Löschung der Verantwortlichkeiten.
4.. Es ist sehr bequem, neue Anforderungsverarbeitungsklassen hinzuzufügen.
Anwendungen in der Entwicklung auf Unternehmensebene und häufig verwendeten Rahmenbedingungen: Spring, Struts Interceptor, Servlet-Filter
Spezifische Beispiele:
/** * Hier ist ein Beispiel für den Urlaub eines Unternehmens: * 1. Jemand nimmt Urlaub (Ereignis) *2. Genehmigung des Projektteams: Die Genehmigung kann weniger als drei Tage genehmigt werden und fordert Superioren mehr als drei Tage*3 an. Genehmigung des Abteilungsleiters: Die Genehmigung kann weniger als zehn Tage genehmigt werden und fordert Superioren mehr als zehn Tage*4 an. Genehmigung des General Managers: Die Genehmigung kann weniger als 30 Tage genehmigt werden und genehmigt nicht länger als 30 Tage*/Public Class Demo {public static void Main (String [] args) {Event Event = New Event ("Programmierer", 32, "Rückkehr nach Heimatstadt, um Verwandte zu besuchen"); Führer a = neuer Grougleader ("Zhang San"); Führer B = neuer Manager ("Li Si"); Führer c = neuer GeneralManager ("Wang Wu"); // Geben Sie die Kette des Verantwortungsmodus an A.SetNextleader (b) an; B.SetNextLeader (C); A.Handler (Ereignis); }}/*** Ereignisobjekt, spezifische Verarbeitungsereignisse in der Verantwortungskette* Diese Instanz ist die Frage, ob Sie nach Urlaub fragen*/Klasse Ereignis {privater String -Name; private int Tage; private String -Vernunft; öffentlicher Ereignis (Zeichenfolge Name, int Tage, String Reason) {Super (); this.name = name; Dies.days = Tage; this.reason = Grund; } public String getName () {return name; } public void setName (String -Name) {this.name = name; } public int getayss () {return tage; } public void setdays (int days) {this.days = tays; } public String getReason () {Return Reason; } public void setReason (String Reason) {this.Reason = Reason; }}/*** abstraktes Verantwortungskettenobjekt, alle folgenden tatsächlichen Verantwortungskettenobjekte werden aus diesem Objekt*/Abstract Class Leader {private String -Name; Schutzleiter Nächster Lader; // Das nächste Verantwortungsobjekt in der Verantwortungskette ist die Grundlage, um die Kette des Verantwortungskettens (String -Name) {Super () zu halten; this.name = name; } public void setNextLeader (Anführer Nextleader) {this.Nextleader = Nextleader; } public String getName () {return name; } public void setName (String -Name) {this.name = name; } geschützter abstrakter void Handler (Ereignisereignis);}/*** Das erste Objekt im Urlaubsprozess, Gruppenleiter*/Klasse Grougleader erweitert Leader {public croppleader (String -Name) {Super (Name); } Protected void Handler (Ereignisereignis) {if (event.getDays () <3) {{ System.out.println ("---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ Urlaubsgrund: " + event.getreason () +" | "); System.out.println ("Genehmiger:"+this.getName ()+"(Gruppenleiter), Pass!"); System.out.println (); } else {System.out.println (this.getName ()+"(Supervisor), keine Berechtigungen!"); this.Nextleader.handler (Ereignis); }}}/*** Das zweite Objekt im Urlaubsprozess, Abteilungsmanager*/Class Manager erweitert den Leader {publicum Manager (String -Name) {Super (Name); } Protected void Handler (Ereignisereignis) {if (event.getDays () <10) { System.out.println("------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- System.out.println (this.getName ()+"(General Manager), keine Berechtigungen!"); 30){ System.out.println("------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ offender: "+event.getName ()+" | "); System.out.println (" Anzahl der Urlaubstage: "+event.getays ()+" Tage "+" | "); System.out.println (" | Grund für Urlaub: "+event.getreason ()+" | "); System.out.println("-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- The leave requester: "+event.getName ()+" |. "); System.out.println ();}}}Das Verantwortungskettenmodell wird hauptsächlich für die Entwicklung wie die Prozesskontrolle verwendet. Im Vergleich zum IF-ELSE-Modell weist es eine höhere Effizienz der Codeänderung und -integration auf, was für die Code-Wartung förderlicher ist. Wenn es notwendig ist, Objekte in die Verantwortungskette hinzuzufügen, müssen wir außerdem eine bestimmte Kettenklasse in der Verantwortung implementieren, dann ein Verantwortungsobjekt erstellen und die Beziehung zwischen Verantwortungsketten ohne größere Gemeinkosten aufrechterhalten. Darüber hinaus wird in der tatsächlichen Konstruktion die Wartung der Verantwortungskette in der Konfigurationsdatei oft durchgeführt, die mehr Entwicklungszeit spart.
Das obige ist der gesamte Inhalt dieses Artikels. Ich hoffe, es wird für das Lernen aller hilfreich sein und ich hoffe, jeder wird Wulin.com mehr unterstützen.