zoukankan      html  css  js  c++  java
  • 责任链模式

    责任链模式

    责任链模式(Chain of Responsibility Pattern)为请求创建了一个接收者对象的链。

    使用场景: 1、有多个对象可以处理同一个请求,具体哪个对象处理该请求由运行时刻自动确定。 2、在不明确指定接收者的情况下,向多个对象中的一个提交一个请求。 3、可动态指定一组对象处理请求。


    1、创建抽象日志类

     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

    2、创建扩展了该抽象日志类的实体类

    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

    3、测试类

     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

    4、运行状态

    当运行loggerChain.logMessage(AbstractLogger.error,"This is error information.")

    5、测试结果

    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
  • 相关阅读:
    linux会话浅析
    linux memory lock浅析
    浅谈动态库符号的私有化与全局化
    LINUX内核内存屏障
    linux内存屏障浅析
    linux内核mem_cgroup浅析
    记一个linux内核内存提权问题
    linux内核cfs浅析
    linux内核tmpfs/shmem浅析
    linux IPv4报文处理浅析
  • 原文地址:https://www.cnblogs.com/hoje/p/11936381.html
Copyright © 2011-2022 走看看