顾名思义,责任链创建了一系列接收者来处理请求。 该模式根据请求类型解耦请求的发送者和接收者。 该模式属于行为模式。
在这种模式下,请求的每个接收者都引用了下一个对象。如果不能处理请求,请求将传递给链中的下一个接收者。
让我们通过一个日志机制的例子来理解这一点。该机制根据消息(请求)的级别记录消息
抽象记录器
package patterns.behavioral.chainofresponsibility; public abstract class abstractlogger{ /** * trace <p>concreteloggers<br></p> <pre class="brush:php;toolbar:false">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); } }
主要
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"); } }
输出:
ErrorLogger:ERROR:log this error message InfoLogger:INFO:info level log message DebugLogger:DEBUG:debug level log message
要点
- 遵循lsp(里氏替换原则,即实体设计模式)。
- SRP遵循坚实的原则。
- 遵循 ocp 在不修改现有代码的情况下,我们可以添加更多的记录器,如跟踪、致命等。
- 也遵循 isp。
以上是责任链的详细内容。请关注图灵教育的其他相关文章!