JavaScript 设计模式 - 职责链模式

职责链模式是一种行为设计模式,它使多个对象有机会按顺序处理请求,从而避免请求的发送者和接收者之间的直接耦合。每个对象都包含对下一个对象的引用,如果一个对象不能处理请求,则会将请求传递给链中的下一个对象,直到请求被处理或者到达链的末尾。

核心概念

  • 处理者(Handler): 定义了处理请求的接口,并且持有一个指向下一个处理者的引用。
  • 具体处理者(Concrete Handler): 实现处理者接口,可以处理请求,也可以选择将请求传递给链中的下一个处理者。
  • 客户端(Client): 创建处理者链,并向链中的第一个处理者提交请求。

JavaScript 示例

假设我们有一个简单的日志记录系统,不同级别的日志(如DEBUG, INFO, WARNING, ERROR)需要被不同的处理器处理,我们可以使用职责链模式来实现这个需求。

class LogHandler {
  constructor(nextHandler) {
    this.nextHandler = nextHandler;
  }

  log(message, level) {
    if (this.nextHandler) {
      return this.nextHandler.log(message, level);
    }
    return `No handler for log level: ${level}`;
  }
}

class DebugLogHandler extends LogHandler {
  log(message, level) {
    if (level === 'DEBUG') {
      console.log(`DEBUG: ${message}`);
      return;
    }
    return super.log(message, level);
  }
}

class InfoLogHandler extends LogHandler {
  log(message, level) {
    if (level === 'INFO') {
      console.log(`INFO: ${message}`);
      return;
    }
    return super.log(message, level);
  }
}

class WarningLogHandler extends LogHandler {
  log(message, level) {
    if (level === 'WARNING') {
      console.log(`WARNING: ${message}`);
      return;
    }
    return super.log(message, level);
  }
}

class ErrorLogHandler extends LogHandler {
  log(message, level) {
    if (level === 'ERROR') {
      console.log(`ERROR: ${message}`);
      return;
    }
    return super.log(message, level);
  }
}

// 使用示例
const debugHandler = new DebugLogHandler();
const infoHandler = new InfoLogHandler(debugHandler);
const warningHandler = new WarningLogHandler(infoHandler);
const errorHandler = new ErrorLogHandler(warningHandler);

// 客户端代码
errorHandler.log("This is an error message", "ERROR"); // 输出:ERROR: This is an error message
errorHandler.log("This is an info message", "INFO"); // 输出:INFO: This is an info message
errorHandler.log("This is a debug message", "DEBUG"); // 输出:DEBUG: This is a debug message
errorHandler.log("This is a strange message", "STRANGE"); // 输出:No handler for log level: STRANGE

在这个例子中,我们定义了一个基本的LogHandler类,它包含一个指向下一个处理者的引用。然后我们创建了四个具体处理者类,每个类负责处理不同级别的日志。客户端代码创建了一个处理者链,当请求(即日志消息)被提交给链的第一个处理者(errorHandler)时,它会根据日志级别逐级处理或传递给下一个处理者,直到找到合适的处理者或链结束。如果没有任何处理者能处理请求,最后一个处理者会返回一个默认的提示信息。这种方式使得日志处理系统灵活且易于扩展,新的日志级别只需添加新的处理者类并插入链中即可。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值