JAVA设计模式之责任链模式
来源:互联网 发布:篡改或者伪造监测数据 编辑:程序博客网 时间:2024/06/02 06:01
抽象类
以员工请假为例,演示责任链模式
package com.imust.chainOfResp;/** * 抽象类 * @author Zachary (为上帝所心仪的人) * @date 2017年9月8日 * @project shejimoshi * @package com.imust.chainOfResp */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);}
package com.imust.chainOfResp;/*8 * 封装请假的基本信息 */public class LeaveRequest { private String empName; private int leaveDays; private String reason; public LeaveRequest(String empName, int leaveDays, String reason) { super(); this.empName = empName; this.leaveDays = leaveDays; this.reason = reason; } 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 getReason() { return reason; } public void setReason(String reason) { this.reason = reason; }}
package com.imust.chainOfResp;/** * 主任 * @author Zachary (为上帝所心仪的人) * @date 2017年9月8日 * @project shejimoshi * @package com.imust.chainOfResp */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.getReason()+"理由"); System.out.println("主任"+this.name+"通过"); }else{ if(this.nextLeader != null){ this.nextLeader.handleRequest(request);; } } }}
package com.imust.chainOfResp;/** * 经理 * @author Zachary (为上帝所心仪的人) * @date 2017年9月8日 * @project shejimoshi * @package com.imust.chainOfResp */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.getEmpName()+"请假"+request.getReason()+"理由"); System.out.println("经理"+this.name+"通过"); }else{ if(this.nextLeader != null){ this.nextLeader.handleRequest(request);; } } }}
package com.imust.chainOfResp;
/**
* 总经理
* @author Zachary (为上帝所心仪的人)
* @date 2017年9月8日
* @project shejimoshi
* @package com.imust.chainOfResp
*/
public class GeneralManager extends Leader{
public GeneralManager(String name) { super(name);}@Overridepublic void handleRequest(LeaveRequest request) { if(request.getLeaveDays()<10){ System.out.println("员工"+request.getEmpName()+"请假"+request.getReason()+"理由"); System.out.println("总经理"+this.name+"通过"); }else{ System.out.println("莫非"+request.getEmpName()+"想辞职,居然请假"+request.getLeaveDays()); }}
}
package com.imust.chainOfResp;
/**
* 副总经理
* @author Zachary (为上帝所心仪的人)
* @date 2017年9月8日
* @project shejimoshi
* @package com.imust.chainOfResp
*/
public class ViceGeneralManager extends Leader{
public ViceGeneralManager(String name) { super(name);}@Overridepublic void handleRequest(LeaveRequest request) { if(request.getLeaveDays()<20){ System.out.println("员工"+request.getEmpName()+"请假"+request.getReason()+"理由"); System.out.println("副总经理"+this.name+"通过"); }else{ if(this.nextLeader != null){ this.nextLeader.handleRequest(request); } }}
}
测试类如下
package com.imust.chainOfResp;
public class Client {
public static void main(String[] args) { Leader a = new Director("张三"); Leader b = new Manager("李四"); Leader c = new GeneralManager("王五"); Leader b2 = new ViceGeneralManager("李小四"); //组织责任链对象的关系 a.setNextLeader(b); b.setNextLeader(b2); b2.setNextLeader(c); //开始请假操作 LeaveRequest req1 = new LeaveRequest("TOM", 10, "回老家探亲"); a.handleRequest(req1);}
}
“`
阅读全文
0 0
- java设计模式之责任链模式
- java设计模式之责任链模式
- Java 设计模式之责任链模式
- Java设计模式之责任链模式
- 《Java设计模式》之责任链模式
- 《Java设计模式 》之责任链模式
- JAVA设计模式之:责任链模式
- java设计模式之责任链模式
- java设计模式之责任链模式
- Java设计模式之责任链模式
- java设计模式之责任链模式
- 《java设计模式》之责任链模式
- java设计模式之责任链模式
- Java设计模式之责任链模式
- java设计模式之责任链模式
- Java设计模式之责任链模式
- JAVA设计模式之责任链模式
- java设计模式之责任链模式
- HDU 5676 ztr loves lucky numbers
- C++ 浅拷贝和深拷贝
- 纯css实现table表格固定列和表头,中间横向滚动的思路-附案例
- 第一次课的笔记
- 对fflush(stdin)功能以及实际应用的个人体会,对初学者应该挺有用
- JAVA设计模式之责任链模式
- Js实现音乐播放控制条
- matlab2c使用c++实现matlab函数系列教程-rand函数
- jquery的ajax后台后去数据的table切换
- Apache优化
- javascript性能优化方面的知识总结
- Codeforces Round #432 (Div. 1) B. Arpa and a list of numbers
- VB程序逆向常用的函数
- 342. Power of Four