赞
踩
作者持续关注 WPS二次开发专题系列,持续为大家带来更多有价值的WPS开发技术细节,如果能够帮助到您,请帮忙来个一键三连,更多问题请联系我(QQ:250325397)
目录
责任链(Chain of Responsibility)模式的定义:为了避免请求发送者与多个请求处理者耦合在一起,于是将所有请求的处理者通过前一对象记住其下一个对象的引用而连成一条链;当有请求发生时,可将请求沿着这条链传递,直到有对象处理它为止。
避免请求发送者与接收者耦合在一起,让多个对象都有可能接收请求,将这些对象连接成一条链,并且沿着这条链传递请求,直到有对象处理它为止。
责任链模式的本质是解耦请求与处理,让请求在处理链中能进行传递与被处理;理解责任链模式应当理解其模式,而不是其具体实现。责任链模式的独到之处是将其节点处理者组合成了链式结构,并允许节点自身决定是否进行请求处理或转发,相当于让请求流动起来。
抽象类
-
- /**
- * 日志接口
- */
- public interface ILogger {
- int INFO = 1;
- int DEBUG = 2;
- int ERROR = 3;
-
- /**
- * 记录日志
- * @param level 日志级别
- * @param msg 日志内容
- */
- void doLogger(int level, String msg, LoggerChain chain);
- }
-
- /**
- * 控制台打印日志
- */
- public class ConsoleLogger implements ILogger {
- @Override
- public void doLogger(int level, String msg, LoggerChain chain) {
- //处理当前日志打印
- System.out.println("Console Logger::[" + level + "] " + msg);
- //继续向下处理
- chain.doLogger(level, msg, chain);
- }
- }
-
- /**
- * file级别的日志
- */
- public class FileLogger implements ILogger {
- @Override
- public void doLogger(int level, String msg, LoggerChain chain) {
- //处理当前日志打印,写入到文件中
- System.out.println("Filter Logger::[" + level + "] " + msg);
- //继续向下处理
- chain.doLogger(level, msg, chain);
- }
- }
-
- /**
- * 日志校验器
- */
- public class ValidateLogger implements ILogger {
- @Override
- public void doLogger(int level, String msg, LoggerChain chain) {
- msg = msg.replace("sdcard", "xxx");
- chain.doLogger(level, msg, chain);
- }
- }
责任链类
- /**
- * 日志处理器链
- */
- public class LoggerChain implements ILogger {
- //日志处理器列表
- private List<ILogger> loggerList = new ArrayList<>();
-
- //当前处理的索引,从0开始
- private int index;
-
- /**
- * 添加日志处理器
- */
- public LoggerChain addLogger(ILogger logger) {
- loggerList.add(logger);
- return this;
- }
-
- @Override
- public void doLogger(int level, String msg, LoggerChain chain) {
- if (index == loggerList.size()) {
- //处理到最后,则返回
- return;
- }
- //继续使用下一个日志处理器处理
- ILogger logger = loggerList.get(index);
- index ++;
- logger.doLogger(level, msg, chain);
- }
- }
具体使用
- public class App {
- public static void main(String[] args) {
-
- LoggerChain logger = new LoggerChain();
- logger.addLogger(new ConsoleLogger())
- //可添加日志敏感内容过滤器或者日志加密器
- .addLogger(new ValidateLogger())
- .addLogger(new FileLogger());
- logger.doLogger(ILogger.INFO, "This is a test log msg, file path:/sdcard/test/test.pdf", logger);
- }
- }
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。