java设计模式---职责链模式
2024-10-12 22:59:48
职责链的本质:分离职责,动态组合
样例:
/** * 定义职责对象的接口 * */ public abstract class Handler { protected Handler successor; /** * 设置下一个处理请求对象 * @param successor */ public void setSuccessor(Handler successor) { this.successor = successor; } /** * 处理聚餐费用的申请 * @param user 申请人 * @param fee 申请的费用 * @return */ public abstract String handlerFeeRequest(String user, double fee); }
/** * 部门经理审批 * */ public class DepManager extends Handler { @Override public String handlerFeeRequest(String user, double fee) { String str = ""; if(fee < 1000) { if("Joe".equals(user)) { str = "Department manager agreed " + user + "'s request, the fee is $" + fee; } else { str = "Department manager didn't agree " + user + "'s request."; } return str; } // more than $1000, next to others. if(this.successor != null) { return successor.handlerFeeRequest(user, fee); } return str; } } /** * 项目经理审批 * */ public class ProjectManager extends Handler { @Override public String handlerFeeRequest(String user, double fee) { String str = ""; if(fee < 500) { if("Joe".equals(user)) { str = "Project manager agreed " + user + "'s request, the fee is $" + fee; } else { str = "Project manager didn't agree " + user + "'s request."; } return str; } // more than $500, next to others. if(this.successor != null) { return successor.handlerFeeRequest(user, fee); } return str; } } /** * 总经理审批 * */ public class GeneralManager extends Handler { @Override public String handlerFeeRequest(String user, double fee) { String str = ""; if(fee >= 1000) { if("Joe".equals(user)) { str = "General manager agreed " + user + "'s request, the fee is $" + fee; } else { str = "General manager didn't agree " + user + "'s request."; } return str; } // next to others. if(this.successor != null) { return successor.handlerFeeRequest(user, fee); } return str; } }
public class Client { public static void main(String[] args) { Handler h1 = new ProjectManager(); Handler h2 = new DepManager(); Handler h3 = new GeneralManager(); h2.setSuccessor(h3); h1.setSuccessor(h2); String ret1 = h1.handlerFeeRequest("Joe", 300); System.out.println(ret1); String ret2 = h1.handlerFeeRequest("Yoyo", 300); System.out.println(ret2); String ret3 = h1.handlerFeeRequest("Joe", 800); System.out.println(ret3); String ret4 = h1.handlerFeeRequest("Yoyo", 800); System.out.println(ret4); String ret5 = h1.handlerFeeRequest("Joe", 1300); System.out.println(ret5); String ret6 = h1.handlerFeeRequest("Yoyo", 1300); System.out.println(ret6); } }
最新文章
- 关于openssl几个API的一点小收获
- 浅谈-js递归函数
- python学习笔记整理——列表
- 在多台服务器上简单实现Redis的数据主从复制(3)(转载)
- HDU-4522 湫湫系列故事——过年回家 最短路
- tomcat实现文件打开下载功能
- 26 个 jQuery使用技巧
- Spring的lazy-init详解
- log4j学习日记-写入数据库
- Hadoop-2.2.0中国文档—— MapReduce 下一代 -- 公平调度
- MEAN教程2-Nodejs安装
- CMake与Make最简单直接的区别 [转]
- web开发简史与技术选型
- IdentityServer4 中文文档 -12- (快速入门)添加外部认证支持
- Nifi 老是死机
- asp一句话
- Golang 笔记 2 函数、结构体、接口、指针
- 【转】四、可空类型Nullable<;T>;到底是什么鬼
- Android 上传大文件
- 如何手动编译java文件