JavaScript 职责链模式

153 阅读1分钟

为请求创建了一个接收者对象的链。这种模式给予请求的类型,对请求的发送者和接收者进行解耦。

比如击鼓传花?或者申请什么?大概意思就是一级一级的往上或往下

class AbstractLogger {
    constructor(level) {
        this.level = level
        this.nextLogger = null
    }
    
    setNextLogger(nextLogger) {
        this.nextLogger = nextLogger
    }
    
    logMessage(level, message) {
        if(this.level === level) this.write(message)
        if(this.nextLogger != null) this.nextLogger.logMessage(level, message)
    }
    
    write(message) {
        console.log('AbstractLogger:', message)
    }
}

AbstractLogger.LOG = 1
AbstractLogger.INFO = 2
AbstractLogger.ERROR = 3

class Logger extends AbstractLogger {
    constructor(name, level) {
        super(level)
        this.name = name
    }
    
    write(message) {
        console.log(`${this.name}: ${message}`)
    }
}

const consoleLog = new Logger('consoleLog', AbstractLogger.LOG)
const consoleInfo = new Logger('consoleInfo', AbstractLogger.INFO)
const consoleError = new Logger('consoleError', AbstractLogger.ERROR)

consoleError.setNextLogger(consoleInfo)
consoleInfo.setNextLogger(consoleLog)

const logger = consoleError

logger.logMessage(AbstractLogger.ERROR, '错误')
logger.logMessage(AbstractLogger.INFO, '信息')
logger.logMessage(AbstractLogger.LOG, '日志')