博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
责任链模式-Chain of Responsibility Pattern
阅读量:5788 次
发布时间:2019-06-18

本文共 3346 字,大约阅读时间需要 11 分钟。

        责任链模式(Chain of Responsiblity Pattern) 为这种请求创建了一个接受者的链。这种模式给予请求的类型

这种模式给予请求的类型 对请求的发送者和接受者进行解偶。 这种类型的设计模式属于行为模式。

       在这种模式中,通常每个接受者都包含对另一个接受者的引用 如果一个对象不能处理该请求  那么它会把相同的请求传递给下一个请求。 

       意图:避免请求发送者与接受者耦合在一起,让多个对象有可能接受请求将这些连成一条链,并且沿着这条链传递请求,直到有对象处理为值。 

      下面是demo.

package com.royan.weakey.platform.pattern.chainResponsibility;import lombok.Data;import lombok.extern.slf4j.Slf4j;/** * 责任链模式(Chain of Responsibility Pattern) * 为请求创建了一个接受者对象的链。这种模式给予请求的类型 * 这种模式给予请求的类型 对请求的发送者和接受者进行解偶。 * 这种类型的设计模式属于行为模式 * 

* 在这种模式中,通常每个接受者都包含对另一个接受者的引用 * 如果一个对象不能处理该请求 那么它会把相同的请求下一个接收者 *

* 意图:避免请求发送者与接受者耦合在一起,让多个对象有可能接受请求 * 将这些连成一条链,并且沿着这条链传递请求 直到有对象处理它为止。 */@Slf4j@Datapublic abstract classAbstractLogger { enum LogLevel { INFO(1), DEBUG(2), ERROR(3); private int code; LogLevel(int code) { this.code = code; } private int getCode() { return code; } } public AbstractLogger(LogLevel logLevel) { this.logLevel = logLevel; } private LogLevel logLevel; protected AbstractLogger nextLogger; public void logMessage(LogLevel level, String message) { if (this.logLevel.getCode() <= level.getCode()) write(message); if (nextLogger != null) nextLogger.logMessage(level, message); } abstract protected void write(String message);}

package com.royan.weakey.platform.pattern.chainResponsibility;import lombok.extern.slf4j.Slf4j;@Slf4jpublic class ErrorLogger extends AbstractLogger {    public ErrorLogger(LogLevel logLevel) {        super(logLevel);    }    @Override    protected void write(String message) {        log.info("Error Console::Logger-{}", message);    }}
package com.royan.weakey.platform.pattern.chainResponsibility;import lombok.extern.slf4j.Slf4j;@Slf4jpublic class FileLogger extends AbstractLogger {    public FileLogger(LogLevel logLevel) {        super(logLevel);    }    @Override    protected void write(String message) {        log.info("File::Logger-{}", message);    }}
package com.royan.weakey.platform.pattern.chainResponsibility;import lombok.Data;import lombok.extern.slf4j.Slf4j;@Slf4jpublic class ConsoleLogger extends AbstractLogger {    public ConsoleLogger(LogLevel logLevel) {        super(logLevel);    }    @Override    protected void write(String message) {        log.info("Standard Console::Logger-{}", message);    }}
package com.royan.weakey.platform.pattern.chainResponsibility;public class ChainPatternDemo {    private static AbstractLogger getChainOfLoggers() {        AbstractLogger errorLogger = new ErrorLogger(AbstractLogger.LogLevel.ERROR);        AbstractLogger fileLogger = new FileLogger(AbstractLogger.LogLevel.DEBUG);        AbstractLogger consoleLogger = new ConsoleLogger(AbstractLogger.LogLevel.INFO);        errorLogger.setNextLogger(fileLogger);        fileLogger.setNextLogger(consoleLogger);        return errorLogger;    }    public static void main(String[] args) {        AbstractLogger loggerChain = getChainOfLoggers();        loggerChain.logMessage(AbstractLogger.LogLevel.INFO, "This is an info information");        loggerChain.logMessage(AbstractLogger.LogLevel.DEBUG, "This is a debug level information.");        loggerChain.logMessage(AbstractLogger.LogLevel.ERROR, "This is an error information.");    }}

 

转载于:https://www.cnblogs.com/caibixiang123/p/10545844.html

你可能感兴趣的文章
Adding custom instruction to RISCV ISA and running it on gem5 and spike(转)
查看>>
JProfiler学习笔记
查看>>
Loadrunner脚本编程(4)-数据类型操作和字符串操作
查看>>
Codeforces Round #529 (Div. 3) 题解
查看>>
CodeForces 598A Tricky Sum
查看>>
HDU 1151 Air Raid
查看>>
RxJava 详解
查看>>
【Daily Scrum】
查看>>
ECMAScript中基本类型和引用类型的值在复制变量值时的区别
查看>>
EF实体部分更新的问题
查看>>
雷林鹏分享:PHP 变量
查看>>
Spring Security Oauth2 认证(获取token/刷新token)流程
查看>>
PyQt5教程——组件(7)
查看>>
arpg网页游戏之地图(二)
查看>>
读取磁盘和卷
查看>>
Docker web管理界面——Shipyard
查看>>
React文档(十九)不使用ES6
查看>>
Django实现微信消息推送
查看>>
python ----元组方法以及修改细节
查看>>
设置橘子浏览器的newtab页面
查看>>