责任链模式(Chain of Responsibility Pattern)

本文介绍了责任链模式的基本概念,通过一个具体的日志记录系统案例解释了该模式的应用。在这个案例中,不同级别的日志被依次传递给一系列的日志处理器进行处理,展示了如何使用责任链模式实现请求处理的解耦。

责任链模式:可以为某个请求创建一个对象链。每个对象依序检查此请求,并对其处理,或者把它传给链中的下一个对象。

责任链上的对象负责处理请求,客户只需要将请求发送到责任链上即可,无需关心处理的细节和请求的传递,所以请求的发送者和接收者解耦了。

类图:

 

具体例子:

 

一个Logger日志抽象类,三个具体日志类继承Logger,责任链的顺序是HighestLogger->MiddleLogger->OrdinaryLogger()(顺序是自己定的,可以从高级到低级也可以低级到高级,看具体实现)

 为了判断日志的级别,定义三个常量,HIGH=3,MIDDLE=2,LOW=1

public abstract class Logger {
    public static final int HIGH = 3;
    public static final int MIDDLE =2;
    public static final int LOW =1;
    Logger nextLogger;
    public void log(int level);
    public void setNextLogger(Logger l) {
        nextLogger = l;
    }
}

public class HighestLogger extends Logger {
    public void log(int level){
        if(level == HIGH) {
               System.out.println("HIGH Log");
    } else if(nextLogger != null){
nextLogger.log(level);

} }

public class MiddleLogger extends Logger {
    public void log(int level){
        if(level == MIDDLE) {
               System.out.println("MIDDLE Log");
    } else if(nextLogger != null){
nextLogger.log(level);

} }


public class OrdinaryLogger extends Logger {
    public void log(int level){
        if(level == LOW) {
               System.out.println("LOW Log");
    } else if(nextLogger != null){
nextLogger.log(level);

} }
 

 

Logger hLogger = new HighLogger();
Logger mLogger = new MiddleLogger();
Logger lLogger = new OrdinaryLogger();

hLogger.setNextLogger(mLogger);
mLogger.setNextLogger(lLogger);

hLogger.log(HIGH);
hLogger.log(MIDDLE);
hLogger.log(LOW);

hLgger作为责任链的链头,如果日志等级不是HIGH,它就调用下一个节点的log,以此类推,如果直到链尾也不能处理,就会丢失这个请求,当然也可以让链尾来处理所有未能被前面的对象处理的请求。

 

转载于:https://www.cnblogs.com/13jhzeng/p/5579187.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值