顾名思义,责任链模式(Chain of Responsibility Pattern)为请求创建了一个接收者对象的链。这种模式给予请求的类型,对请求的发送者和接收者进行解耦。这种类型的设计模式属于行为型模式。
意图
避免请求发送者与接收者耦合在一起,让多个对象都有可能接收请求,将这些对象连接成一条链,并且沿着这条链传递请求,直到有对象处理它为止。
实现
实现如下
log的分级功能
- 创建抽象类
public abstract class AbsLogger{
protected int level;
//责任链的下一级
protected AbsLogger nextLogger;
public void setNextLogger(AbsLogger logger){
nextLogger = logger;
}
public void log(int level,String msg){
if (this.level <= level){
show(msg);
}
if (nextLogger != null){
nextLogger.log(level, msg);
}
}
protected abstract void show(String msg);
}
- 实现抽象类
public class InfoLogger extends AbsLogger{
public InfoLogger(int level) {
this.level = level;
}
@Override
protected void show(String msg) {
System.out.println("Info : "+msg);
}
}
public class DebugLogger extends AbsLogger{
public DebugLogger(int level) {
this.level = level;
}
@Override
protected void show(String msg) {
System.out.println("Debug : "+msg);
}
}
public class ErrorLogger extends AbsLogger{
public ErrorLogger(int level) {
this.level = level;
}
@Override
protected void show(String msg) {
System.out.println("Error : "+msg);
}
}
- 使用
public void main(String... args){
AbsLogger logger = getAllLogger();
logger.log(3,"error msg");
logger.log(2,"debug msg");
logger.log(1,"info msg");
}
private AbsLogger getAllLogger() {
AbsLogger errorLogger = new ErrorLogger(3);
AbsLogger debugLogger = new DebugLogger(2);
AbsLogger infoLogger = new InfoLogger(1);
errorLogger.setNextLogger(debugLogger);
debugLogger.setNextLogger(infoLogger);
return errorLogger;
}
- 结果
I/System.out: Error : error msg
I/System.out: Debug : error msg
I/System.out: Info : error msg
I/System.out: Debug : debug msg
I/System.out: Info : debug msg
I/System.out: Info : info msg