顧名思義,責任鏈模式(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