責任鏈模式(Chain of Responsibility Pattern)爲請求建立了一個接收者對象的鏈。ide
使用場景: 一、有多個對象能夠處理同一個請求,具體哪一個對象處理該請求由運行時刻自動肯定。 二、在不明確指定接收者的狀況下,向多個對象中的一個提交一個請求。 三、可動態指定一組對象處理請求。測試
1 public abstract class AbstractLogger { 2 public static int info = 1; 3 public static int debug = 2; 4 public static int error = 3; 5 6 protected int level; 7 8 protected AbstractLogger nextLogger; 9 10 public void setNextLogger(AbstractLogger abstractLogger) { 11 this.nextLogger = abstractLogger; 12 } 13 14 public void logMessage(int level,String Message){ 15 if(this.level<= level){ 16 write(Message); 17 } 18 if(nextLogger != null){ 19 nextLogger.logMessage(level,Message); 20 } 21 } 22 23 protected abstract void write(String Message); 24 }
1 public class ConsoleLogger extends AbstractLogger { 2 public ConsoleLogger(int level){ 3 this.level = level; 4 } 5 @Override 6 protected void write(String Message) { 7 System.out.println("Console log:" + Message); 8 } 9 }
1 public class DebugLogger extends AbstractLogger { 2 public DebugLogger(int level){ 3 this.level = level; 4 } 5 @Override 6 protected void write(String Message) { 7 System.out.println("Debug log:"+ Message); 8 } 9 }
1 public class ErrorLogger extends AbstractLogger { 2 public ErrorLogger(int level){ 3 this.level = level; 4 } 5 6 @Override 7 protected void write(String Message) { 8 System.out.println("Error logger:"+Message); 9 } 10 }
1 public class ChainPatternDemo { 2 public static void main(String[] args) { 3 AbstractLogger loggerChain = getChainLogger(); 4 loggerChain.logMessage(AbstractLogger.info,"This is an information."); 5 loggerChain.logMessage(AbstractLogger.debug,"This is debug information."); 6 loggerChain.logMessage(AbstractLogger.error,"This is error information."); 7 } 8 9 private static AbstractLogger getChainLogger() { 10 AbstractLogger consoleLogger = new ConsoleLogger(AbstractLogger.info); 11 AbstractLogger debugLogger = new DebugLogger(AbstractLogger.debug); 12 AbstractLogger errorLogger = new ErrorLogger(ErrorLogger.error); 13 14 errorLogger.setNextLogger(debugLogger); 15 debugLogger.setNextLogger(consoleLogger); 16 17 return errorLogger; 18 } 19 }
當運行loggerChain.logMessage(AbstractLogger.error,"This is error information.")時this
Console log:This is an information.
Debug log:This is debug information.
Console log:This is debug information.
Error logger:This is error information.
Debug log:This is error information.
Console log:This is error information.