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


/**
 * 定义职责对象的接口
 *
 */
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);
          }
}

最新文章

  1. 关于openssl几个API的一点小收获
  2. 浅谈-js递归函数
  3. python学习笔记整理——列表
  4. 在多台服务器上简单实现Redis的数据主从复制(3)(转载)
  5. HDU-4522 湫湫系列故事——过年回家 最短路
  6. tomcat实现文件打开下载功能
  7. 26 个 jQuery使用技巧
  8. Spring的lazy-init详解
  9. log4j学习日记-写入数据库
  10. Hadoop-2.2.0中国文档—— MapReduce 下一代 -- 公平调度
  11. MEAN教程2-Nodejs安装
  12. CMake与Make最简单直接的区别 [转]
  13. web开发简史与技术选型
  14. IdentityServer4 中文文档 -12- (快速入门)添加外部认证支持
  15. Nifi 老是死机
  16. asp一句话
  17. Golang 笔记 2 函数、结构体、接口、指针
  18. 【转】四、可空类型Nullable&lt;T&gt;到底是什么鬼
  19. Android 上传大文件
  20. 如何手动编译java文件

热门文章

  1. Hibernate查询多个数据
  2. BlockingQueue阻塞队列(解决多线程中数据安全问题 可用于抢票,秒杀)
  3. KMP算法小结
  4. setuptools安装和错误解决
  5. Docker容器的运用
  6. 硬盘存储计量单位KB、MB、GB大小换算
  7. hiredis的各种windows版本
  8. Docker: How to enable/disable HTTP Proxy in Toolbox
  9. springMVC源码分析--异常处理机制HandlerExceptionResolver执行原理(二)
  10. 理解性能的奥秘——应用程序中慢,SSMS中快(4)——收集解决参数嗅探问题的信息