java设计模式---职责链模式

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


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


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值