成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

Chain of Responsibility Pattern(譯)

Acceml / 2343人閱讀

摘要:每一個都會檢查并且比較消息的等級與該等級,判斷打印或者不打印,并且傳遞消息到下一個。設(shè)置每個的錯誤等級以及每個的,每一個的都是當(dāng)前鏈的一部分。

責(zé)任鏈模式

責(zé)任鏈模式顧名思義,對于一個請求會去創(chuàng)建一條接受者鏈。這種模式會解耦一種類型的請求中接受者和發(fā)送者,該模式模式屬于行為模式的一種。
在該模式當(dāng)中,一般情況下,每個接受者都會有另外一個接受者的引用,如果該接受者無法處理該請求,請求會通過引用傳入下一個接受者。

實現(xiàn)

我們創(chuàng)建一個抽象類AbstaractLogger,該類中含有日志的記錄等級。然后我們會創(chuàng)建三個logger實現(xiàn)AbstractLogger。每一個logger都會檢查并且比較消息的等級與該logger等級,判斷打印或者不打印,并且傳遞消息到下一個logger。

第一步

創(chuàng)建一個抽象的Logger類

AbstractLogger.java

public abstract class AbstractLogger {
   public static int INFO = 1;
   public static int DEBUG = 2;
   public static int ERROR = 3;

   protected int level;

   //next element in chain or responsibility
   protected AbstractLogger nextLogger;

   public void setNextLogger(AbstractLogger nextLogger){
      this.nextLogger = nextLogger;
   }
   
   public void logMessage(int level, String message){
      if(this.level <= level){
         write(message);
      }
      if(nextLogger !=null){
         nextLogger.logMessage(level, message);
      }
   }

   abstract protected void write(String message);
    
}
第二步

創(chuàng)建具體的類實現(xiàn)AtstractLogger

ConsoleLogger.java

public class ConsoleLogger extends AbstractLogger {

   public ConsoleLogger(int level){
      this.level = level;
   }

   @Override
   protected void write(String message) {        
      System.out.println("Standard Console::Logger: " + message);
   }
}

ErrorLogger.java

public class ErrorLogger extends AbstractLogger {

   public ErrorLogger(int level){
      this.level = level;
   }

   @Override
   protected void write(String message) {        
      System.out.println("Error Console::Logger: " + message);
   }
}

FileLogger.java

public class FileLogger extends AbstractLogger {

   public FileLogger(int level){
      this.level = level;
   }

   @Override
   protected void write(String message) {        
      System.out.println("File::Logger: " + message);
   }
}
第三步

創(chuàng)建不同類型的logger。設(shè)置每個Logger的錯誤等級以及每個logger的Next logger,每一個logger的NextLogger都是當(dāng)前鏈的一部分。

ChainPatternDemo.java

public class ChainPatternDemo {
    
   private static AbstractLogger getChainOfLoggers(){

      AbstractLogger errorLogger = new ErrorLogger(AbstractLogger.ERROR);
      AbstractLogger fileLogger = new FileLogger(AbstractLogger.DEBUG);
      AbstractLogger consoleLogger = new ConsoleLogger(AbstractLogger.INFO);

      errorLogger.setNextLogger(fileLogger);
      fileLogger.setNextLogger(consoleLogger);

      return errorLogger;    
   }

   public static void main(String[] args) {
      AbstractLogger loggerChain = getChainOfLoggers();

      loggerChain.logMessage(AbstractLogger.INFO, 
         "This is an information.");

      loggerChain.logMessage(AbstractLogger.DEBUG, 
         "This is an debug level information.");

      loggerChain.logMessage(AbstractLogger.ERROR, 
         "This is an error information.");
   }
}
第四步

校驗輸出

Standard Console::Logger: This is an information.
File::Logger: This is an debug level information.
Standard Console::Logger: This is an debug level information.
Error Console::Logger: This is an error information.
File::Logger: This is an error information.
Standard Console::Logger: This is an error information.

文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請注明本文地址:http://systransis.cn/yun/65907.html

相關(guān)文章

  • 設(shè)計模式

    摘要:設(shè)計模式目的為了代碼可重用性讓代碼更容易被他人理解保證代碼可靠性設(shè)計原則設(shè)計原則是設(shè)計模式為了達(dá)到其目的,所實現(xiàn)的一些準(zhǔn)則。 設(shè)計模式簡介 1.什么是設(shè)計模式 設(shè)計模式對是經(jīng)驗的總結(jié),是一套被反復(fù)使用的、多數(shù)人知曉的、經(jīng)過分類編目的、代碼設(shè)計經(jīng)驗的總結(jié)。代表了最佳的實戰(zhàn)。 2.提出及GOF 在 1994 年,由 Erich Gamma、Richard Helm、Ralph Johnso...

    enrecul101 評論0 收藏0
  • 責(zé)任鏈模式(Chain Of Responsibility

    摘要:責(zé)任鏈模式一責(zé)任鏈模式定義在責(zé)任鏈模式中,許多對象由每個對象及其對下家的引用而連接起來形成一條鏈請求在這個鏈上傳遞,知道其中的某一個對象決定處理此請求角色抽象處理者角色具體處理者角色純與不純純的責(zé)任鏈模式要么處理,要么讓下家處理,而不能處理 責(zé)任鏈模式 一. 責(zé)任鏈模式 1.1 定義 在責(zé)任鏈模式中,許多對象由每個對象及其對下家的引用而連接起來形成一條鏈.請求在這個鏈上傳遞,知道其中的...

    godlong_X 評論0 收藏0
  • 背景介紹 之前在閱讀《JavaScript設(shè)計模式和開發(fā)實踐》這本書的時候,收貨頗豐,學(xué)習(xí)了設(shè)計模式在很多場景下的應(yīng)用。 但也是因為書上場景過多,所以當(dāng)記不清某一種設(shè)計模式的時候,翻書溫習(xí)復(fù)雜案例的成本是相對較高的。有時候,只需要一段經(jīng)典、簡潔的demo就可以迅速回顧起精髓,在快速業(yè)務(wù)開發(fā)中,這是個比較經(jīng)濟(jì)的做法。 除此之外,當(dāng)主要工作語言發(fā)生變化的時候(例如:js -> python),簡潔的d...

    Neilyo 評論0 收藏0
  • PHP基礎(chǔ)

    摘要:分別為適配器模式,裝飾器模式,代理模式,外觀模式,橋接模式,組合模式,享元模式。設(shè)計模式五適配器模式適配器模式將某個對象的接生成器和協(xié)程的實現(xiàn)在這篇文章中,作者針對那些比較難以理解的概念,以一個更為通俗的方式去講明白。。 PHP 源碼注解 PHP 的詳細(xì)源碼注解 PHP 字符串操作整理 一些有關(guān)字符串的常用操作。 Redis 常見七種使用場景 (PHP 實戰(zhàn)) 這篇文章主要介紹利用 R...

    HtmlCssJs 評論0 收藏0
  • PHP 設(shè)計模式概述

    摘要:創(chuàng)建型模式主要有以下五種簡單工廠模式和工廠方法模式抽象工廠模式單例模式建造者模式原型模式在設(shè)計模式一書中將工廠模式分為兩類工廠方法模式與抽象工廠模式。 一、 設(shè)計模式(Design pattern)是什么 設(shè)計模式是一套被反復(fù)使用、多數(shù)人知曉、經(jīng)過分類編目的代碼設(shè)計的經(jīng)驗總結(jié)。使用設(shè)計模式是為了可重用代碼、讓代碼更容易被他人理解、保證代碼可靠性。 二、 為什么會有設(shè)計模式 在軟件開發(fā)過...

    IntMain 評論0 收藏0

發(fā)表評論

0條評論

最新活動
閱讀需要支付1元查看
<