Android设计模式——责任链模式。
来源:互联网 发布:js实现360度全景图 编辑:程序博客网 时间:2024/06/13 07:31
跟小伙伴聊天听到一个责任链模式,感觉能避免大量if else,这里用一个例子记录一下。
抽象处理者角色类:设置/获取继承者,处理实现。
public abstract class Handler { /** * 持有下一个处理请求的对象(继承者) */ protected Handler successor = null; /** * 取值方法 */ public Handler getSuccessor() { return successor; } /** * 设置下一个处理请求的对象 */ public void setSuccessor(Handler successor) { this.successor = successor; } /** * 处理聚餐费用的申请 * @param user 申请人 * @param fee 申请的钱数 * @return 成功或失败的具体通知 */ public abstract String handleFeeRequest(String user , double fee); }
具体处理者角:
public class ProjectManager extends Handler { @Override public String handleFeeRequest(String user, double fee) { String str = ""; //项目经理权限比较小,只能在500以内 if(fee < 500) { str = "成功:项目经理同意【" + user + "】的聚餐费用,金额为" + fee + "元"; }else { //超过500,继续传递给级别更高的人处理 if(getSuccessor() != null) { return getSuccessor().handleFeeRequest(user, fee); } } return str; } }
public class DeptManager extends Handler { @Override public String handleFeeRequest(String user, double fee) { String str = ""; //部门经理的权限只能在1000以内 if(fee < 1000) { //为了测试,简单点,只同意张三的请求 str = "成功:部门经理同意【" + user + "】的聚餐费用,金额为" + fee + "元"; }else { //超过1000,继续传递给级别更高的人处理 if(getSuccessor() != null) { return getSuccessor().handleFeeRequest(user, fee); } } return str; } }
public class GeneralManager extends Handler { @Override public String handleFeeRequest(String user, double fee) { String str = ""; //总经理的权限很大,只要请求到了这里,他都可以处理 if(fee >= 1000) { str = "成功:总经理同意【" + user + "】的聚餐费用,金额为" + fee + "元"; }else { //如果还有后继的处理对象,继续传递 if(getSuccessor() != null) { return getSuccessor().handleFeeRequest(user, fee); } } return str; } }
public class Client { public static void main(String[] args) { //先要组装责任链 Handler h1 = new GeneralManager(); Handler h2 = new DeptManager(); Handler h3 = new ProjectManager(); h3.setSuccessor(h2); h2.setSuccessor(h1); //开始测试 String test1 = h3.handleFeeRequest("张三", 300); System.out.println("test1 = " + test1); String test2 = h3.handleFeeRequest("张三", 700); System.out.println("test2 = " + test2); String test3 = h3.handleFeeRequest("张三", 1500); System.out.println("test3 = " + test3); } }
职责链灵活在哪
1. 改变内部的传递规则
在内部,项目经理完全可以跳过人事部到那一关直接找到总经理。
每个人都可以去动态地指定他的继任者。
2. 可以从职责链任何一关开始。
如果项目经理不在,可以直接去找部门经理,责任链还会继续,没有影响。
3.用与不用的区别
不用职责链的结构,我们需要和公司中的每一个层级都发生耦合关系。
如果反映在代码上即使我们需要在一个类中去写上很多丑陋的if….else语句。
如果用了职责链,相当于我们面对的是一个黑箱,我们只需要认识其中的一个部门,然后让黑箱内部去负责传递就好了
原帖:http://blog.csdn.net/jason0539/article/details/45091639
0 0
- Android设计模式——责任链模式。
- Android设计模式之——责任链模式
- 设计模式——责任链模式
- 设计模式——责任链模式
- 设计模式——责任链模式
- 设计模式——责任链模式
- 设计模式——责任链模式
- 设计模式——责任链模式
- 设计模式——责任链模式
- 【设计模式】——责任链模式
- 设计模式——责任链模式
- 设计模式——责任链模式
- 设计模式—责任链模式
- 大话设计模式—责任链模式
- Java设计模式—责任链模式
- 设计模式—责任链模式
- Android设计模式-责任链模式
- Android设计模式之责任链模式
- 系统权限管理
- iOS UiTextView限制输入字数的方法
- oracle数据库建立表空间、用户、并授权
- java_web 学习记录(三):ajax
- 0e开头MD5 python生成脚本 PHP哈希弱类型比较缺陷
- Android设计模式——责任链模式。
- php 多维数组排序
- Android Pull解析 XML
- pod安装
- C++ 学习
- 数据库连接池配置
- 纯CSS实现自适应正方形
- nodejs搭建web服务器
- java