白话-23种设计模式15-责任链模式
【摘要】 一、白话 现实生活中,我们会遇到很多流程,如请假流程,先是组长审批,没问题,然后是经理审批,没问题,最后是老板审批。这就是责任链模式的一种应用,请求按照请求链一次传递。二、定义 责任链模式为请求创建了一个接收者对象的链。这种模式给予请求的类型,对请求的发送者和接收者进行解耦。 抽象处理者(Handler)角色:定义一个处理请求的接口,包含抽象处理方法和一个后继连接。 具体处理者(Co...
一、白话
现实生活中,我们会遇到很多流程,如请假流程,先是组长审批,没问题,然后是经理审批,没问题,最后是老板审批。这就是责任链模式的一种应用,请求按照请求链一次传递。
二、定义
责任链模式为请求创建了一个接收者对象的链。这种模式给予请求的类型,对请求的发送者和接收者进行解耦。
抽象处理者(Handler)角色:定义一个处理请求的接口,包含抽象处理方法和一个后继连接。
具体处理者(Concrete Handler)角色:实现抽象处理者的处理方法,判断能否处理本次请求,如果可以处理请求则处理,否则将该请求转给它的后继者
三、示例
// 抽象处理者-提取公共方法
public abstract class AbLog {
// 下一个责任链
AbLog nextLog;
public AbLog getNextLog() {
return nextLog;
}
public void setNextLog(AbLog nextLog) {
this.nextLog = nextLog;
}
public abstract void logMessage(String level, String message);
}
// 具体处理者-处理细节
public class InfoLog extends AbLog {
@Override
public void logMessage(String level, String message) {
if ("info".equals(level)) {
System.out.println("InfoLog开始记录日志,日志级别:"+ level + ",消息:"+message);
return;
}
nextLog.logMessage(level,message);
}
}
// 具体处理者-处理细节
public class ErrorLog extends AbLog {
@Override
public void logMessage(String level, String message) {
if ("error".equals(level)) {
System.out.println("ErrorLog开始记录日志,日志级别:"+ level + ",消息:"+message);
return;
}
nextLog.logMessage(level,message);
}
}
输出示例:
InfoLog开始记录日志,日志级别:info,消息:记录日志信息1
ErrorLog开始记录日志,日志级别:error,消息:记录日志信息2
四、总结
特点:减低发送者和接受者耦合度。动态新增或者删除责任。新增新的处理类方便。容易出现循环调用。性能影响
实际应用:Filter过滤器,handler处理器。
【声明】本内容来自华为云开发者社区博主,不代表华为云及华为云开发者社区的观点和立场。转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息,否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱:
cloudbbs@huaweicloud.com
- 点赞
- 收藏
- 关注作者
评论(0)