Verantwortungskettenmuster: Mehrere Objekte werden durch Referenzen, die dem nächsten Zuhause ihrer Objekte entsprechen, in eine Kette in Verbindung gebracht, und die Anforderung wird diese Kette übergeben, bis ein empfangendes Objekt in der Kette die Anforderung verarbeitet. Da der anfordernde Kunde nicht weiß, wer die Anfrage in der Kette letztendlich bearbeitet, kann das System die Verantwortlichkeiten dynamisch neu organisieren und zuordnen, ohne den Kunden zu beeinflussen, wodurch die Kopplung zwischen dem Anforderungssender und dem Anforderungshandler vermieden wird.
In der Verantwortungskette sind drei Rollen beteiligt:
1.. Abstrakte Prozessorrolle
2. Spezifische Handler -Rolle
3. Kleines Beispiel für den Anforderungssender: Angenommen, Sie kaufen ein Haus und müssen beim Kauf eines Hauses verhandeln. Die Positionen der Person, die das Haus verkauft, sind unterschiedlich, und die ermäßigten Preise sind ebenfalls unterschiedlich. Verschiedene Positionen können eine Kette zur Bearbeitung der Anforderung bilden. Wir haben vorläufig festgelegt: * Basisverkäufer können nur 3% Rabatt anbieten * Vertriebsleiter: 5% Rabatt * Vertriebsdirektor: 8% Rabatt
Java -Instanz
Klassendiagramm:
/ *** abstrakte Verantwortung*/ öffentliche abstrakte Klasse IFILTER {privater IFILTER -Nachfolger; public ifilter getuccessor () {return Nachfolger; } public void setSuccessor (IFILTER -Nachfolger) {this.successor = Nachfolger; } public abstract void handleFilter (); public abstract void handle filter2 (); } / *** Spezifische Verantwortlichkeiten*/ öffentliche Klasse ConcretFilter erweitert Ifilter {private String -Name; public concretefilter (String name) {this.name = name; } @Override public void handleFilter () { / * * Behandeln Sie es zuerst, wenn es einen Nachfolger gibt, dann können Sie es einmal handeln * / system.out.println (Name + "Anfrage verarbeitet"); if (getuccessor ()! = null) {getuccessor (). handleFilter (); }} @Override public void handleFilter2 () { / * * Wenn es einen Nachfolger gibt, wird der Nachfolger selbst behandelt. Andernfalls werden Sie es selbst behandeln*/ if (getuccessor ()! = Null) {getuccessor (). HandleFilter2 (); } else {System.out.println (Name + "Anfrage verarbeitet"); }}} public class test {public static void main (String [] args) {ifilter filter1 = new Concretefilter ("Berechtigungsfilter"); // Berechtigungsfilter iFilter filter2 = new Concretefilter ("Suffix-Filter"); // Suffix Filter ifilter filter3 = New ConcreteFilter ("Stylefilter"; filter1.setsuSccessor (filter2); filter2.setsuScessor (filter3); System.out.println ("----- Das Folgende wird von jedem Prozessor (einschließlich Nachfolger) behandelt, die Bestellung ist auch ein Pass-für-Level-Pass ------"); filter1.handleFilter (); System.out.println("-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------Drucken:
------ Das Folgende ist der Prozess jedes Prozessors (einschließlich Nachfolger), und die Bestellung ist auch eine Ebene nach dem anderen ----- Erlaubnisfilter behandelt das Anfrage-Suffix-Filter Die Anforderung mit dem Anforderungsfilter behandelt ------- Das Folgende ist der Prozess des letzten successor---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------