多多色-多人伦交性欧美在线观看-多人伦精品一区二区三区视频-多色视频-免费黄色视屏网站-免费黄色在线

國內最全IT社區平臺 聯系我們 | 收藏本站
阿里云優惠2
您當前位置:首頁 > php開源 > 綜合技術 > GOF23設計模式之責任鏈模式(chain of responsibility)之實現

GOF23設計模式之責任鏈模式(chain of responsibility)之實現

來源:程序員人生   發布時間:2015-04-23 08:00:40 閱讀次數:3521次

/**
 * 請假條
 * 封裝請假的信息。
 */
package com.bjsxt.cn.chainOfResponsibility;
public class LeaveRequest {
 private String empName;
 private int leaveDays;
 private String reasons;
 
 public LeaveRequest(String empName, int leaveDays, String reasons) {
  super();
  this.empName = empName;
  this.leaveDays = leaveDays;
  this.reasons = reasons;
 }
 public String getEmpName() {
  return empName;
 }
 public void setEmpName(String empName) {
  this.empName = empName;
 }
 public int getLeaveDays() {
  return leaveDays;
 }
 public void setLeaveDays(int leaveDays) {
  this.leaveDays = leaveDays;
 }
 public String getReasons() {
  return reasons;
 }
 public void setReasons(String reasons) {
  this.reasons = reasons;
 }
 @Override
 public String toString() {
  
  return "雇員:" + empName + "請假,天數:" + leaveDays + ",請假理由:" + reasons;
 }
}




/**
 * 抽象類Leader,在請假的流程當中,把審批人員
 * 主任,經理,總經理,抽象成1個類,他們
 * 具有相同的功能,審批。handleRequest
 * 2015年4月9日14:40:49
 * 
 */
package com.bjsxt.cn.chainOfResponsibility;
public abstract class Leader {
 protected String name;
 protected Leader nextLeader;
 
 public Leader(String name) {
  super();
  this.name = name;
 }
 public void setNextLeader(Leader nextLeader) {
  this.nextLeader = nextLeader;
 }
 
 public abstract void handleRequest(LeaveRequest request);
 public abstract String check();
}




/**
 * 主任類:
 *  如果請假天數小于3天,主任審批
 * 2015年4月9日14:43:36
 */
package com.bjsxt.cn.chainOfResponsibility;
public class Director extends Leader {
 public Director(String name) {
  super(name);
 }
 @Override
 public void handleRequest(LeaveRequest request) {
  if (request.getLeaveDays() < 3) {
   System.out.println("雇員名字:" + request.getEmpName() +"請假,天數為:" + request.getLeaveDays() +"請假緣由為" +request.getReasons());
   System.out.println(check());
  } else {
   if (this.nextLeader != null) {
    this.nextLeader.handleRequest(request);
   }
  }
 }
 @Override
 public String check() {
  return "主任:" + name + "審批通過!";
  
 }
 
 
}




/**
 * 時間:2015年4月9日14:48:13
 * 經理類: 如果請假條數大于等于3天,小于10天,經理審批
 */
package com.bjsxt.cn.chainOfResponsibility;
public class Manager extends Leader {
 
 public Manager(String name) {
  super(name);
 }
 
 @Override
 public void handleRequest(LeaveRequest request) {
  if (request.getLeaveDays() <10) {
   System.out.println(request.toString());
   System.out.println(check());
  } else {
   if (this.nextLeader != null) {
    this.nextLeader.handleRequest(request);
   }
  }
 }
 @Override
 public String check() {
  return "經理:" + name + "審批通過";
 }
}




/**
 * 總經理: 如果大于等于10天,小于310天,總經理審批
 * 時間:2015年4月9日14:53:41
 */
package com.bjsxt.cn.chainOfResponsibility;
public class GeneralManager extends Leader {
 public GeneralManager(String name) {
  super(name);
 }
 
 
 @Override
 public void handleRequest(LeaveRequest request) {
  if (request.getLeaveDays() < 30) {
   System.out.println(request.toString());
   System.out.println(check());
  } else {
   System.out.println(request.toString() + "難道想辭職,不批準");
  }
 }
 @Override
 public String check() {
  return "總經理 :" + name +"審核通過";
 }
}


/**
 * 2015年4月9日14:59:50
 * 測試程序:測試責任鏈模式的使用
 * 我們使用責任鏈模式而不是非常繁冗復雜的ifelse結構,是為了擴大時的方便。
 * 例如,此時,我們如果想要加入1位副總經理,來處理10到20天的假條審核
 * 我們只需要加入新的類ViceGeneralManager,在客戶程序中創建新的責任鏈便可。
 * 這樣符合OCP原則,即開閉原則。
 */
package com.bjsxt.cn.chainOfResponsibility;
public class Client {
 public static void main(String[] args) {
  LeaveRequest l1 = new LeaveRequest("杰倫", 1, "旅游");
  LeaveRequest l2 = new LeaveRequest("張靚穎", 8, "戀愛");
  LeaveRequest l3 = new LeaveRequest("夏洛蒂", 15, "失戀了");
  LeaveRequest l4 = new LeaveRequest("巴赫", 37, "在家帶孩子");
  
  Leader ll1 = new Director("張主任");
  Leader ll2 = new Manager("李經理");
  Leader ll3 = new GeneralManager("王總經理");
  //創建責任鏈
  ll1.setNextLeader(ll2);
  ll2.setNextLeader(ll3);
  
  ll1.handleRequest(l1);
  ll1.handleRequest(l2);
  ll1.handleRequest(l3);
  ll1.handleRequest(l4);
  
 }
}
/*
雇員名字:杰倫請假,天數為:1請假緣由為旅游
主任:張主任審批通過!
雇員:張靚穎請假,天數:8,請假理由:戀愛
經理:李經理審批通過
雇員:夏洛蒂請假,天數:15,請假理由:失戀了
總經理 :王總經理審核通過
雇員:巴赫請假,天數:37,請假理由:在家帶孩子難道想辭職,不批準
 * 
 * 
 */



/**
 * 加入副總經理處理10天到210天的假條審核
 * 2015年4月9日15:12:46
 */
package com.bjsxt.cn.chainOfResponsibility;
public class ViceGeneralManager extends Leader{
 public ViceGeneralManager(String name) {
  super(name);
 }
 @Override
 public void handleRequest(LeaveRequest request) {
  if (request.getLeaveDays() < 20) {
   System.out.println(request.toString());
   System.out.println(check());
  } else {
   if (this.nextLeader != null) {
    this.nextLeader.handleRequest(request);
   }
  }
 }
 @Override
 public String check() {
  return "副總經理:" + name + "審核通過";
 }
}



/**
 * 增加ViceGeneralManager類以后稍作調劑就能夠加入加入該類以后的新的責任鏈。
 */
package com.bjsxt.cn.chainOfResponsibility;
public class Client2 {
 public static void main(String[] args) {
  LeaveRequest l1 = new LeaveRequest("杰倫", 1, "旅游");
  LeaveRequest l2 = new LeaveRequest("張靚穎", 8, "戀愛");
  LeaveRequest l3 = new LeaveRequest("夏洛蒂", 15, "失戀了");
  LeaveRequest l4 = new LeaveRequest("巴赫", 37, "在家帶孩子");
  
  Leader ll1 = new Director("張主任");
  Leader ll2 = new Manager("李經理");
  Leader ll22 = new ViceGeneralManager("王副總經理");
  Leader ll3 = new GeneralManager("王總經理");
  
  //創建責任鏈
  ll1.setNextLeader(ll2);
  ll2.setNextLeader(ll22);
  ll22.setNextLeader(ll3);
  
  ll1.handleRequest(l1);
  ll1.handleRequest(l2);
  ll1.handleRequest(l3);
  ll1.handleRequest(l4);
  
 }
}
/*
 * 
雇員名字:杰倫請假,天數為:1請假緣由為旅游
主任:張主任審批通過!
雇員:張靚穎請假,天數:8,請假理由:戀愛
經理:李經理審批通過
雇員:夏洛蒂請假,天數:15,請假理由:失戀了
副總經理:王副總經理審核通過
雇員:巴赫請假,天數:37,請假理由:在家帶孩子難道想辭職,不批準
 * 
 * */




生活不易,碼農辛苦
如果您覺得本網站對您的學習有所幫助,可以手機掃描二維碼進行捐贈
程序員人生
------分隔線----------------------------
分享到:
------分隔線----------------------------
關閉
程序員人生
主站蜘蛛池模板: 亚洲国产成人久久笫一页 | 欧美18videosex性欧美1819 | 黑人gay巨大 | 手机看片国产欧美日韩高清 | 亚洲国产精品一区 | 国产亚洲精品久久77777 | qvod小说区图片区亚洲 | 欧美精品色精品一区二区三区 | 欧美一级视频免费观看 | 日韩亚洲欧美综合一区二区三区 | 免费国产福利 | 中文字幕亚洲色图 | 男女男精品视频网站在线观看 | 国产中文99视频在线观看 | 日本欧美一区二区三区不卡视频 | 成人免费淫片免费观看 | 亚欧精品一区二区三区四区 | 久久精品二区 | 亚洲人在线观看 | www.欧美xxxx| www.色图| 波霸欧美性猛交xxxxxx | 国产女人在线视频 | 一级白嫩美女毛片免费 | 成人性生活视频 | 亚州1区2区3区4区产品乱码2021 | 97欧美在线看欧美视频免费 | 精品乱人伦一区二区 | 国产香蕉97碰碰久久人人 | 国产一级毛片外aaaa | 欧美性最猛xxxx在线观看视频 | 动漫毛片 | 亚洲精品一区二区久久 | 欧美日韩一区二区三区视频在线观看 | 久久国产精品久久国产精品 | 久久精品亚洲精品一区 | 久久视频一区 | 手机看片福利久久 | 啪啪欧美| 国产一级做a爱免费视频 | 亚洲不卡在线播放 |