责任链模式
2014-05-27 10:38
351 查看
概念不多说,直接上代码,供大家一看
功能描述:员工请假申请,先向 PM 申请,如果 PM 同意则通过,如果 PM 不同意则提交给 HR ... HR 不同意则提交给 CEO ,这是一个典型的责任链模式。1 请假类(请假时间,请假原因)
package com.zhouqian.pattern.filterchain2; /** ******************************************************************************************** * @ClassName: Request * @Description: 请假申请类 * @author ZhouQian zhouqian@cnsesan.com * @date 2013-8-29-上午9:49:13 ******************************************************************************************** */ class Request { private int day; private String reason; public Request(int day,String reason){ this.day = day; this.reason = reason; } public int getDay() { return day; } public void setDay(int day) { this.day = day; } public String getReason() { return reason; } public void setReason(String reason) { this.reason = reason; } }
责任链处理抽象类:
package com.zhouqian.pattern.filterchain2; /** ******************************************************************************************** * @ClassName: Boss * @Description: 责任链处理抽象类 * @author ZhouQian zhouqian@cnsesan.com * @date 2013-8-29-上午9:52:46 ******************************************************************************************** */ public abstract class Boss { private String name; private Boss successor; public Boss(String name){ this.name = name; } public abstract boolean PassRequest(Request request); public String getName() { return name; } public void setName(String name) { this.name = name; } public Boss getSuccessor() { return successor; } public void setSuccessor(Boss successor) { this.successor = successor; } }
PM
package com.zhouqian.pattern.filterchain2; /** ******************************************************************************************** * @ClassName: PM * @Description: TODO * @author ZhouQian zhouqian@cnsesan.com * @date 2013-8-29-上午9:54:24 ******************************************************************************************** */ public class PM extends Boss { public PM(String name) { super(name); } @Override public boolean PassRequest(Request request) { int day = request.getDay(); if( day <= 0.5 ){ System.out.println("PM:同意申请"); return true; }else{ System.out.println("PM:权限不足,将申请反馈上级"); return getSuccessor().PassRequest(request); } } }
HR
package com.zhouqian.pattern.filterchain2; /** ******************************************************************************************** * @ClassName: HR * @Description: TODO * @author ZhouQian zhouqian@cnsesan.com * @date 2013-8-29-上午10:04:47 ******************************************************************************************** */ public class HR extends Boss { public HR(String name) { super(name); } @Override public boolean PassRequest(Request request) { int day = request.getDay(); if( day > 0.5 && day<=2 ){ System.out.println("HR:同意申请"); return true; }else{ System.out.println("HR:权限不足,将申请反馈上级"); return getSuccessor().PassRequest(request); } } }
CEO
package com.zhouqian.pattern.filterchain2; /** ******************************************************************************************** * @ClassName: CEO * @Description: TODO * @author ZhouQian zhouqian@cnsesan.com * @date 2014-5-27-上午10:11:02 ******************************************************************************************** */ public class CEO extends Boss{ public CEO(String name) { super(name); } @Override public boolean PassRequest(Request request) { int day = request.getDay(); if( day > 2 && day <= 6){ System.out.println("CEO:同意申请"); return true; }else{ System.out.println("CEO:申请时间过长不同意申请"); return false; } } }
请假申请类(组装责任链)
package com.zhouqian.pattern.filterchain2; /** ******************************************************************************************** * @ClassName: LeaveProcessor * @Description: 请假申请处理类 * @author ZhouQian zhouqian@cnsesan.com * @date 2014-5-27-上午10:21:32 ******************************************************************************************** */ public class LeaveProcessor { public boolean process(Request request){ PM pm = new PM("项目经理"); HR hr = new HR("人事"); CEO ceo = new CEO("董事会"); hr.setSuccessor(ceo); pm.setSuccessor(hr); return pm.PassRequest(request); } }
客户端,用户提交申请类,MAIN 入口
package com.zhouqian.pattern.filterchain2; /** ******************************************************************************************** * @ClassName: Client * @Description: TODO * @author ZhouQian zhouqian@cnsesan.com * @date 2014-5-27-上午10:07:01 ******************************************************************************************** */ public class Client { public static void main(String[] args) { Request request = new Request(-1, "生病!"); LeaveProcessor processor = new LeaveProcessor(); processor.process(request); } }
相关文章推荐
- FP角度下的责任链模式(中间件模式,middleware)
- 责任链模式 Chain of Responsibility
- 责任链模式(chain)—员工请假
- 请求的链式处理——责任链模式
- 详解C++设计模式编程中责任链模式的应用
- 大话设计模式—责任链模式
- Java设计模式系列之责任链模式
- 请求的链式处理---责任链模式
- 责任链模式
- iOS设计模式(八) 责任链模式
- java/android 设计模式学习笔记(15)---责任链模式
- 设计模式GOF23——责任链模式
- 设计模式:责任链模式(Chain of Responsibility)
- 责任链模式
- <设计模式17>责任链模式
- 设计模式学习笔记(六:责任链模式)
- 责任链模式——请让处理者与请求者解耦
- Java,责任链模式:replaceAll报错Unclosed group near index 1
- 责任链模式
- 设计模式之13 - 责任链模式Chain Of Responsibility