当前位置: 首页 > 图灵资讯 > 技术篇> 责任链

责任链

来源:图灵教育
时间:2024-09-18 15:22:02

责任链

顾名思义,责任链创建了一系列接收者来处理请求。 该模式根据请求类型解耦请求的发送者和接收者。 该模式属于行为模式。

在这种模式下,请求的每个接收者都引用了下一个对象。如果不能处理请求,请求将传递给链中的下一个接收者。

让我们通过一个日志机制的例子来理解这一点。该机制根据消息(请求)的级别记录消息

抽象记录器

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。

以上是责任链的详细内容。请关注图灵教育的其他相关文章!