资讯专栏INFORMATION COLUMN

Chain of Responsibility Pattern(译)

Acceml / 2316人阅读

摘要:每一个都会检查并且比较消息的等级与该等级,判断打印或者不打印,并且传递消息到下一个。设置每个的错误等级以及每个的,每一个的都是当前链的一部分。

责任链模式

责任链模式顾名思义,对于一个请求会去创建一条接受者链。这种模式会解耦一种类型的请求中接受者和发送者,该模式模式属于行为模式的一种。
在该模式当中,一般情况下,每个接受者都会有另外一个接受者的引用,如果该接受者无法处理该请求,请求会通过引用传入下一个接受者。

实现

我们创建一个抽象类AbstaractLogger,该类中含有日志的记录等级。然后我们会创建三个logger实现AbstractLogger。每一个logger都会检查并且比较消息的等级与该logger等级,判断打印或者不打印,并且传递消息到下一个logger。

第一步

创建一个抽象的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);
    
}
第二步

创建具体的类实现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);
   }
}
第三步

创建不同类型的logger。设置每个Logger的错误等级以及每个logger的Next logger,每一个logger的NextLogger都是当前链的一部分。

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.

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/65907.html

相关文章

  • 设计模式

    摘要:设计模式目的为了代码可重用性让代码更容易被他人理解保证代码可靠性设计原则设计原则是设计模式为了达到其目的,所实现的一些准则。 设计模式简介 1.什么是设计模式 设计模式对是经验的总结,是一套被反复使用的、多数人知晓的、经过分类编目的、代码设计经验的总结。代表了最佳的实战。 2.提出及GOF 在 1994 年,由 Erich Gamma、Richard Helm、Ralph Johnso...

    enrecul101 评论0 收藏0
  • 责任链模式(Chain Of Responsibility

    摘要:责任链模式一责任链模式定义在责任链模式中,许多对象由每个对象及其对下家的引用而连接起来形成一条链请求在这个链上传递,知道其中的某一个对象决定处理此请求角色抽象处理者角色具体处理者角色纯与不纯纯的责任链模式要么处理,要么让下家处理,而不能处理 责任链模式 一. 责任链模式 1.1 定义 在责任链模式中,许多对象由每个对象及其对下家的引用而连接起来形成一条链.请求在这个链上传递,知道其中的...

    godlong_X 评论0 收藏0
  • 背景介绍 之前在阅读《JavaScript设计模式和开发实践》这本书的时候,收货颇丰,学习了设计模式在很多场景下的应用。 但也是因为书上场景过多,所以当记不清某一种设计模式的时候,翻书温习复杂案例的成本是相对较高的。有时候,只需要一段经典、简洁的demo就可以迅速回顾起精髓,在快速业务开发中,这是个比较经济的做法。 除此之外,当主要工作语言发生变化的时候(例如:js -> python),简洁的d...

    Neilyo 评论0 收藏0
  • PHP基础

    摘要:分别为适配器模式,装饰器模式,代理模式,外观模式,桥接模式,组合模式,享元模式。设计模式五适配器模式适配器模式将某个对象的接生成器和协程的实现在这篇文章中,作者针对那些比较难以理解的概念,以一个更为通俗的方式去讲明白。。 PHP 源码注解 PHP 的详细源码注解 PHP 字符串操作整理 一些有关字符串的常用操作。 Redis 常见七种使用场景 (PHP 实战) 这篇文章主要介绍利用 R...

    HtmlCssJs 评论0 收藏0
  • PHP 设计模式概述

    摘要:创建型模式主要有以下五种简单工厂模式和工厂方法模式抽象工厂模式单例模式建造者模式原型模式在设计模式一书中将工厂模式分为两类工厂方法模式与抽象工厂模式。 一、 设计模式(Design pattern)是什么 设计模式是一套被反复使用、多数人知晓、经过分类编目的代码设计的经验总结。使用设计模式是为了可重用代码、让代码更容易被他人理解、保证代码可靠性。 二、 为什么会有设计模式 在软件开发过...

    IntMain 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<