首页 > 基础资料 博客日记
java-责任链模式
2023-07-24 19:16:33基础资料围观703次
本篇文章分享java-责任链模式,对你有帮助的话记得收藏一下,看Java资料网收获更多编程知识
责任链模式介绍
责任链模式是一种行为型模式。责任链模式里,很多对象由每一个对象对其下家的引用而连接起来形成一条链。请求在这个链上传递,直到链上的某一个对象决定处理此请求。发出这个请求的客户端并不知道链上的哪一个对象最终处理这个请求。
比如:员工请假3天以下,直属组长就能批。一个星期的假期,需要走到总监这一层批准。半个月的 假期则需要走到总经理这个级别了。请假的情况就非常适合使用责任链模式。事先不知道会由哪层领导批复假期,而各层领导的审批职责就好像铁链一样连接在一起,一个请求沿着这条链一直往上传。
//1.定义一个所有层级请假处理器都需要实现的接口 public interface AskForLeaveHander { void setNextHandler(AskForLeaveHander nextHandler); boolean handler(int days); }
public class HeadmanHander implements AskForLeaveHander { private AskForLeaveHander nextHandler; @Override public void setNextHandler(AskForLeaveHander nextHandler) { this.nextHandler = nextHandler; } @Override public boolean handler(int days) { if (days <= 3){ System.out.println("组长成功批复了!"); return true; } System.out.println(String.format("%d 天假期超出组长权限,请总监批复",days)); return nextHandler.handler(days); } }
public class ChiefHander implements AskForLeaveHander { private AskForLeaveHander nextHandler; @Override public void setNextHandler(AskForLeaveHander nextHandler) { this.nextHandler = nextHandler; } @Override public boolean handler(int days) { if (days <= 7){ System.out.println("总监成功批复了!"); return true; } System.out.println(String.format("%d 天假期超出总监权限,请总经理批复", days)); return nextHandler.handler(days); } }
public class GmHander implements AskForLeaveHander { private AskForLeaveHander nextHandler; @Override public void setNextHandler(AskForLeaveHander nextHandler) { this.nextHandler = nextHandler; } @Override public boolean handler(int days) { if (days <= 60){ System.out.println("总经理成功批复了!"); return true; } System.out.println("单次最多只能请60天假!"); return false; } }
@GetMapping("/askOff")
public BasicResult<String> askOff(@RequestParam Integer days) {
HeadmanHander headmanHander = new HeadmanHander();
ChiefHander chiefHander = new ChiefHander();
GmHander gmHander = new GmHander();
headmanHander.setNextHandler(chiefHander);
chiefHander.setNextHandler(gmHander);
if (headmanHander.handler(days)){
return BasicResult.success("您申请的假期已被批准");
}else{
return BasicResult.fail("最近项目太忙了,暂不批假");
}
}
启动项目:http://localhost:10001/user/askOff?days=18


文章来源:https://www.cnblogs.com/yinduang/p/16490666.html
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:jacktools123@163.com进行投诉反馈,一经查实,立即删除!
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:jacktools123@163.com进行投诉反馈,一经查实,立即删除!
标签:
相关文章
最新发布
- 【开源工具分享】一款开源的高效PDF合并与图片转换工具:mergePDF,一款轻量级桌面可视化工具,支持将多个PDF文件合并为单一PDF,也可将PDF转换为图片格式,并提供“单张图片”与“长图片”两种
- 剑指offer-56、删除链表中重复的节点
- jvm~分析gc老年代内存过高的原因
- Java 哪些情况会导致内存泄漏
- Spring AOP + Guava RateLimiter:我是如何用注解实现优雅限流的?
- 回溯算法总结
- Java 操作 Markdown(1)--commonmark-java 使用
- 分库分表数据源ShardingSphereDataSource的Connection元数据误用问题分析
- jvm~jvm配置与系统配置的关系
- 使用Java Stream,将集合转换为一对一Map

