责任链模式(Chain of Responsibility Pattern)
Posted 没有梦想的小灰灰
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了责任链模式(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,以此类推,如果直到链尾也不能处理,就会丢失这个请求,当然也可以让链尾来处理所有未能被前面的对象处理的请求。
以上是关于责任链模式(Chain of Responsibility Pattern)的主要内容,如果未能解决你的问题,请参考以下文章
责任链模式(Chain of Responsibility)
15-责任链(Chain of Responsibility)模式Ruby实现
责任链模式(Chain of Responsibility Pattern)
责任链模式(chain of responsibility)