职责链的本质:分离职责,动态组合
样例


  1. /**
  2. * 定义职责对象的接口
  3. *
  4. */
  5. public abstract class Handler {
  6.  
  7. protected Handler successor;
  8.  
  9. /**
  10. * 设置下一个处理请求对象
  11. * @param successor
  12. */
  13. public void setSuccessor(Handler successor) {
  14. this.successor = successor;
  15. }
  16. /**
  17. * 处理聚餐费用的申请
  18. * @param user 申请人
  19. * @param fee 申请的费用
  20. * @return
  21. */
  22. public abstract String handlerFeeRequest(String user, double fee);
  23. }

  1. /**
  2. * 部门经理审批
  3. *
  4. */
  5. public class DepManager extends Handler {
  6.  
  7. @Override
  8. public String handlerFeeRequest(String user, double fee) {
  9.  
  10. String str = "";
  11.  
  12. if(fee < 1000) {
  13. if("Joe".equals(user)) {
  14. str = "Department manager agreed " + user + "'s request, the fee is $" + fee;
  15. } else {
  16. str = "Department manager didn't agree " + user + "'s request.";
  17. }
  18. return str;
  19. }
  20. // more than $1000, next to others.
  21. if(this.successor != null) {
  22. return successor.handlerFeeRequest(user, fee);
  23. }
  24. return str;
  25. }
  26. }
  27.  
  28. /**
  29. * 项目经理审批
  30. *
  31. */
  32. public class ProjectManager extends Handler {
  33.  
  34. @Override
  35. public String handlerFeeRequest(String user, double fee) {
  36. String str = "";
  37.  
  38. if(fee < 500) {
  39. if("Joe".equals(user)) {
  40. str = "Project manager agreed " + user + "'s request, the fee is $" + fee;
  41. } else {
  42. str = "Project manager didn't agree " + user + "'s request.";
  43. }
  44. return str;
  45. }
  46. // more than $500, next to others.
  47. if(this.successor != null) {
  48. return successor.handlerFeeRequest(user, fee);
  49. }
  50. return str;
  51. }
  52. }
  53.  
  54. /**
  55. * 总经理审批
  56. *
  57. */
  58. public class GeneralManager extends Handler {
  59.  
  60. @Override
  61. public String handlerFeeRequest(String user, double fee) {
  62. String str = "";
  63.  
  64. if(fee >= 1000) {
  65. if("Joe".equals(user)) {
  66. str = "General manager agreed " + user + "'s request, the fee is $" + fee;
  67. } else {
  68. str = "General manager didn't agree " + user + "'s request.";
  69. }
  70. return str;
  71. }
  72. // next to others.
  73. if(this.successor != null) {
  74. return successor.handlerFeeRequest(user, fee);
  75. }
  76. return str;
  77. }
  78. }

  1. public class Client {
  2.  
  3. public static void main(String[] args) {
  4. Handler h1 = new ProjectManager();
  5. Handler h2 = new DepManager();
  6. Handler h3 = new GeneralManager();
  7.  
  8. h2.setSuccessor(h3);
  9. h1.setSuccessor(h2);
  10.  
  11. String ret1 = h1.handlerFeeRequest("Joe", 300);
  12. System.out.println(ret1);
  13. String ret2 = h1.handlerFeeRequest("Yoyo", 300);
  14. System.out.println(ret2);
  15.  
  16. String ret3 = h1.handlerFeeRequest("Joe", 800);
  17. System.out.println(ret3);
  18. String ret4 = h1.handlerFeeRequest("Yoyo", 800);
  19. System.out.println(ret4);
  20.  
  21. String ret5 = h1.handlerFeeRequest("Joe", 1300);
  22. System.out.println(ret5);
  23. String ret6 = h1.handlerFeeRequest("Yoyo", 1300);
  24. System.out.println(ret6);
  25. }
  26. }

java设计模式---职责链模式的更多相关文章

  1. JAVA 设计模式 职责链模式

    用途 职责链模式 (Chain Of Responsibility) 使多个对象都有机会处理请求,从而避免请求的发送者和接收者之间的耦合关系. 将这个对象连成一条链,并沿着这条链传递该请求,直到有一个 ...

  2. 17. 星际争霸之php设计模式--职责链模式

    题记==============================================================================本php设计模式专辑来源于博客(jymo ...

  3. 【设计模式】Java设计模式 - 责任链模式

    [设计模式]Java设计模式 - 责任链模式 不断学习才是王道 继续踏上学习之路,学之分享笔记 总有一天我也能像各位大佬一样 一个有梦有戏的人 @怒放吧德德 目录 [设计模式]Java设计模式 - 责 ...

  4. OOP设计模式[JAVA]——03职责链模式

    职责链模式 Responsibility of Chain 在职责链模式里,很多对象由每一个对象对其下家的引用而连接起来形成一条链.请求在这个链上传递,直到链上的某一个对象决定处理此请求.发出这个请求 ...

  5. java 之 职责链模式(大话设计模式)

    目前很多OA办公自动化软件,加快了办公效率,简化流程.相信很多小伙伴都用过.笔者了解到的大多数办公软件底层实现流程大多数采用的都是Activity或者是JBPM框架. 今天笔者要说的也是类似于流程的一 ...

  6. 设计模式:职责链模式(Chain of Responsibility)

    去年参加校招要到长沙来,这个对于我来说不是特别喜欢(但又必须的来,谁叫咱不是985.211的娃呢),但是对于某些人来说就是福音了.大四还有课,而且学校抓的比较严,所以对于那些想翘课的人来说这个是最好不 ...

  7. 深入浅出设计模式——职责链模式(Chain of Responsibility Pattern)

    模式动机 职责链可以是一条直线.一个环或者一个树形结构,最常见的职责链是直线型,即沿着一条单向的链来传递请求.链上的每一个对象都是请求处理者,职责链模式可以将请求的处理者组织成一条链,并使请求沿着链传 ...

  8. C++设计模式——职责链模式

    什么是职责链模式? 在GOF的<设计模式:可复用面向对象软件的基础>一书中对职责链模式是这样说的:使多个对象都有机会处理请求,从而避免请求的发送者和接收者之间的耦合关系.将这些对象连成一条 ...

  9. java 设计模式 -- 责任链模式

    设计模式 – 责任链模式 介绍: 责任链模式是一种动态行为模式,有多个对象,每一个对象分别拥有其下家的引用.连起来形成一条链.待处理对象则传到此链上,在此链进行传递,且待处理对象并不知道此会被链上的哪 ...

随机推荐

  1. IOI2016Day2. Messy

    题目链接:http://uoj.ac/problem/239 题目大意: 这是一道交互题,交互库维护了一个数据结构,可以存储n为二进制串,一开始你可以向空的数据结构中插入若干二进制串, 接下来这个数据 ...

  2. day04 Java Web 开发入门

    day04 Java Web 开发入门 1. web 开发相关介绍 2. web 服务器 3. Tomcat服务器启动的问题 4. Tomcat目录结构 5. Web应用程序(虚拟目录映射,缺省web ...

  3. all unicode

    Unicode Chart Range Decimal Name 0x0000-0x007F 0-127 Basic Latin 0x0080-0x00FF 128-255 Latin-1 Suppl ...

  4. MFC误报内存泄露的修复

    在debug状态退出程序的时候,VS会在输出窗口列出可能的内存泄露的地方. MFC中使用DEBUG_NEW能够更方便的定位泄露的地点.但假如MFC的dll释放""过早"& ...

  5. 潜谈IT从业人员在传统IT和互联网之间的择业问题(下)-互联网公司

    互联网带来的一片晴天 相对于传统行业来说,互联网行业要显得相对对技术人员尊重些. 在互联网行业中,采用的技术.概念也较传统形行业来说要新,技术人员也容易在此找到自己的一方净土. 因为互联网这个行当讲究 ...

  6. springMVC源码分析--AbstractControllerUrlHandlerMapping(六)

    上一篇博客springMVC源码分析--AbstractDetectingUrlHandlerMapping(五)中我们介绍了AbstractDetectingUrlHandlerMapping,其定 ...

  7. 详解EBS接口开发之库存事务处理-物料批次导入

    库存事务处理-物料批次导入 --系统批次表 SELECT * FROM MTL_LOT_NUMBERS T; --API创建批次 inv_lot_api_pub.create_inv_lot(x_re ...

  8. Swift中不用桥接文件和.h头文件直接和C代码交互的方法

    我们知道一般情况下Swit要想调用obj-c,c或c++代码必须通过obj-c以及桥接文件才可以办到,但是对于某些简单的代码,我们可以跳过桥接文件和.h头文件,直接和C代码交互呢! 我们再Projec ...

  9. 安卓Button-TextView-EditText综合运用

    1.如何使用安卓中的按键Button? 1.先从控件库拖一个按钮button的控件,在XML设置好宽高等参数 对应的就是Button这个图标,直接拖出来即可; 以下是设置这个按钮对应的XML代码: & ...

  10. volatile足以保证数据同步吗

    上一节已经了解了java内存模型,JMM为了提高执行性能,引入了工作内存和主存两个概念,在继续讨论之前必须先搞清四种存储介质:寄存器.高级缓存.RAM和ROM. RAM与ROM大家都比较熟悉了,可以看 ...