Java设计模式—职责链模式(Chain of Responsibility)

本文深入探讨了职责链设计模式的原理与应用,通过具体实例展示了如何使用该模式避免请求发送者与接收者之间的直接耦合,实现请求的灵活处理与传递。特别介绍了职责链模式在Servlet过滤器中的应用,并提供了详细的代码示例。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

目录

目的

应用实例

代码 


 

  • 目的

避免请求发送者与接收者耦合在一起,让多个对象都有可能接收请求,将他们连接成一条链,并且沿着这条链传递请求,直到有对象处理为止。

  • 应用实例

  1. 职责链上的处理者负责处理请求,客户只需要将请求发送到职责链上即可,无须关心请求的处理细节和请求的传递。
  2. Servlet的过滤器Fileter。
  • 代码 

package com.gary.pattern.chain;

/**
 * describe:抽象记录器类
 *
 * @author gary
 * @date 2018/12/23
 */
public abstract class AbstractLogger {
    public static int INFO = 1;
    public static int DEBUG = 2;
    public static int ERROR = 3;

    protected int level;
    protected AbstractLogger nextLogger;

    public AbstractLogger setNextLogger(AbstractLogger nextLogger) {
        this.nextLogger = nextLogger;
        return this;
    }

    public void logMessage(int level, String message) {
        if (level >= this.level) {
            write(message);
        }
        if (nextLogger != null) {
            nextLogger.logMessage(level, message);
        }
    }

    abstract public void write(String message);
}
package com.gary.pattern.chain;

/**
 * describe:记录器类的实现类
 *
 * @author gary
 * @date 2018/12/23
 */
public class ErrorLogger extends AbstractLogger {

    public ErrorLogger(int level) {
        this.level = level;
    }


    @Override
    public void write(String message) {
        System.out.println("ErrorLogger:" + message);
    }
}
package com.gary.pattern.chain;

/**
 * describe:记录器类的实现类
 *
 * @author gary
 * @date 2018/12/23
 */
public class DebugLogger extends AbstractLogger {

    public DebugLogger(int level) {
        this.level = level;
    }


    @Override
    public void write(String message) {
        System.out.println("DebugLogger:" + message);
    }
}
package com.gary.pattern.chain;

/**
 * describe:记录器类的实现类
 *
 * @author gary
 * @date 2018/12/23
 */
public class ConsoleLogger extends AbstractLogger {

    public ConsoleLogger(int level) {
        this.level = level;
    }


    @Override
    public void write(String message) {
        System.out.println("ConsoleLogger:" + message);
    }
}
package com.gary.pattern.chain;

/**
 * describe:记录器链测试Demo
 *
 * @author gary
 * @date 2018/12/23
 */
public class ChainDemo {

    /**
     * 创建不同类型的记录器,赋予不同级别,并每个记录器设置下一个记录器。
     *
     */
    private static AbstractLogger getChainOfLoggers() {
        return new ErrorLogger(AbstractLogger.ERROR)
            .setNextLogger(new DebugLogger(AbstractLogger.DEBUG)
            .setNextLogger(new ConsoleLogger(AbstractLogger.INFO)));
    }

    public static void main(String[] args) {

        AbstractLogger chainOfLogger = getChainOfLoggers();

        chainOfLogger.logMessage(AbstractLogger.INFO, "This is an info information");

        chainOfLogger.logMessage(AbstractLogger.DEBUG, "This is an dubug information");

        chainOfLogger.logMessage(AbstractLogger.ERROR, "This is an error information");
    }
}

ConsoleLogger:This is an info information
DebugLogger:This is an dubug information
ConsoleLogger:This is an dubug information
ErrorLogger:This is an error information
DebugLogger:This is an error information
ConsoleLogger:This is an error information

Process finished with exit code 0

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值