Wie der Name schon sagt, erstellt eine Verantwortungskette eine Kette von Empfängerobjekten zur Bearbeitung von Anfragen.
Dieses Muster entkoppelt den Absender und Empfänger der Anfrage basierend auf dem Anfragetyp.
Dieses Muster fällt unter das Verhaltensmuster.
In diesem Muster hat jedes Empfängerobjekt der Anfrage einen Verweis auf das nächste Objekt. Wenn es die Anfrage nicht verarbeiten kann, wird die Anfrage an den nächsten Empfänger in der Kette weitergeleitet.
Lassen Sie uns dies am Beispiel eines Protokollierungsmechanismus verstehen, der Nachrichten basierend auf der Ebene der Nachricht (Anfrage) protokolliert
AbstractLogger
package Patterns.Behavioral.chainOfResponsibility; public abstract class AbstractLogger{ /** * TRACE < DEBUG < INFO < WARN < ERROR < FATAL * which means if the level is INFO, then INFO, WARN, ERROR and FATAL messages will be logged * but if the level is ERROR then only ERROR and FATAL messages will be logged */ //higher the number higher the priority public static int DEBUG = 1; public static int INFO = 2; public static int ERROR = 3; protected int LEVEL; //next Logger in the chain of responsibility private AbstractLogger nextLogger; public void setNextLogger(AbstractLogger logger){ this.nextLogger = logger; } public void logMessage(int level, String message){ //If the logging level of the message is greater than the current Logger's LEVEL then it will be logged //example if level = ERROR and this.LEVEL = INFO then the message will be logged as INFO has a lower priority than ERROR if(this.LEVEL <=level){ write(message); } // else the message/request will be passed down to the next logger/object in the chain else{ if(nextLogger!=null){ nextLogger.logMessage(level, message); } } } abstract void write(String message); }
ConcreteLoggers
package Patterns.Behavioral.chainOfResponsibility; public class DebugLogger extends AbstractLogger { private String className = this.getClass().getSimpleName(); private String logger = "DEBUG"; public DebugLogger(){ this.LEVEL = 1; } @Override void write(String message) { System.out.println(className+":"+logger+":"+message); } } package Patterns.Behavioral.chainOfResponsibility; public class InfoLogger extends AbstractLogger { private String className = this.getClass().getSimpleName(); private String logger = "INFO"; public InfoLogger(){ this.LEVEL = 2; } @Override void write(String message) { System.out.println(className+":"+logger+":"+message); } } package Patterns.Behavioral.chainOfResponsibility; public class ErrorLogger extends AbstractLogger { private String className = this.getClass().getSimpleName(); private String logger = "ERROR"; public ErrorLogger(){ this.LEVEL = 3; } @Override void write(String message) { System.out.println(className+":"+logger+":"+message); } }
Haupt
package Patterns.Behavioral.chainOfResponsibility; public class Main { public static AbstractLogger intializeLoggers(){ AbstractLogger errorLogger = new ErrorLogger(); //LEVEL = 3; AbstractLogger infoLogger = new InfoLogger(); //LEVEL = 2; AbstractLogger debugLogger = new DebugLogger(); // LEVEL = 1; errorLogger.setNextLogger(infoLogger); infoLogger.setNextLogger(debugLogger); return errorLogger;// return the highest priority Logger first } public static void main(String args[]){ // initialize the chain of responsible objects AbstractLogger logger = intializeLoggers(); //pass the request down the responsibility chain //logging level 3 logger logger.logMessage(3, "log this error message"); //loggin level 2 logger logger.logMessage(2, "info level log message"); //logging level 1 logger logger.logMessage(1, "debug level log message"); } }
Ausgabe:
ErrorLogger:ERROR:log this error message InfoLogger:INFO:info level log message DebugLogger:DEBUG:debug level log message
Wichtige Punkte
Das obige ist der detaillierte Inhalt vonVerantwortungskette. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!