責任鏈模式

責任鏈模式

責任鏈模式(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 }
AbstractLogger

二、建立擴展了該抽象日誌類的實體類

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 }
ConsoleLogger
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 }
DebugLogger
 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 }
ErrorLogger

三、測試類

 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 }
ChainPatternDemo

四、運行狀態

當運行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.
View Code
相關文章
相關標籤/搜索