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
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构