Java設計模式—職責鏈模式(Chain of Responsibility)
阿新 • • 發佈:2018-12-23
目錄
-
目的
避免請求傳送者與接收者耦合在一起,讓多個物件都有可能接收請求,將他們連線成一條鏈,並且沿著這條鏈傳遞請求,直到有物件處理為止。
-
應用例項
- 職責鏈上的處理者負責處理請求,客戶只需要將請求傳送到職責鏈上即可,無須關心請求的處理細節和請求的傳遞。
- 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