GOF23的一些总结(十三)
来源:互联网 发布:linux系统查看文件大小 编辑:程序博客网 时间:2024/05/29 03:27
责任链模式:将能够处理同一类请求的对象连成一条链,所提交的请求沿着链传递。链上的对象逐个判断能否处理,能处理的话就作处理,不能做处理的传递给下一个对象。
实例举例:java中的异常机制,就是责任链模式,javascript的追踪也是责任链模式,servlet的过滤连,Struts2的请求链接模式。
实例演示:员工请假类
package com.dasenlin.cn;/** * 添加请假事宜 * @author Administrator * */public class LeaveRequest { private String requestName; private Integer requestDays; private String requestReason; public LeaveRequest(String requestName, Integer requestDays, String requestReason) { super(); this.requestName = requestName; this.requestDays = requestDays; this.requestReason = requestReason; } public LeaveRequest() { super(); } public String getRequestName() { return requestName; } public void setRequestName(String requestName) { this.requestName = requestName; } public Integer getRequestDays() { return requestDays; } public void setRequestDays(Integer requestDays) { this.requestDays = requestDays; } public String getRequestReason() { return requestReason; } public void setRequestReason(String requestReason) { this.requestReason = requestReason; }}
领导相关关系要处理的类,和处理的事务
package com.dasenlin.cn;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.dasenlin.cn;/** * 主任类 * @author Administrator * */public class Director extends Leader { public Director(String name) { super(name); } @Override public void handleRequest(LeaveRequest request) { if(request.getRequestDays()<3){ System.out.println("员工:"+request.getRequestName()+"请假,天数:"+request.getRequestDays()+"理由:"+request.getRequestReason()); System.out.println("主任:"+this.name+"审核通过"); }else{ if(this.nextLeader!=null){ this.nextLeader.handleRequest(request); } } }}
经理
package com.dasenlin.cn;/** * 经理审核 * @author Administrator * */public class Manager extends Leader { public Manager(String name) { super(name); } @Override public void handleRequest(LeaveRequest request) { if(request.getRequestDays()<10){ System.out.println("员工:"+request.getRequestName()+"天数:"+request.getRequestDays()+"原因:"+request.getRequestReason()); System.out.println("经理:"+this.name+"审核通过"); }else{ if(this.nextLeader!=null){ this.nextLeader.handleRequest(request); } } }}
总经理
package com.dasenlin.cn;/** * 总经理审核 * @author Administrator * */public class GeneralManager extends Leader { public GeneralManager(String name) { super(name); } @Override public void handleRequest(LeaveRequest request) { if(request.getRequestDays()<30){ System.out.println("员工:"+request.getRequestName()+"天数:"+request.getRequestDays()+"原因:"+request.getRequestReason()); System.out.println("总经理:"+this.name+"审核通过"); }else{ System.out.println("莫非:"+request.getRequestName()+"想辞职,居然请假"+request.getRequestDays()+"天"); } }}
测试类开始
package com.dasenlin.cn;/** * 测试的责任链类 * @author Administrator * */public class Client { /** * @param args */ public static void main(String[] args) { //设置3个之间的关系 Leader a = new Director("张主任"); Leader b = new Manager("李经理"); Leader c = new GeneralManager("王总"); //组织责任链的关系 a.setNextLeader(b); b.setNextLeader(c); //请求假条 LeaveRequest req = new LeaveRequest("诸葛亮",-10,"回去结婚"); a.handleRequest(req); }}
0 0
- GOF23的一些总结(十三)
- GOF23的一些总结(一)
- GOF23的一些总结(二)
- GOF23的一些总结(三)
- GOF23的一些总结(四)
- GOF23的一些总结(五)
- GOF23的一些总结(六)
- GOF23的一些总结(七)
- GOF23的一些总结(八)
- GOF23的一些总结(九)
- GOF23的一些总结(十)
- GOF23的一些总结(十一)
- GOF23的一些总结(十二)
- GOF23的一些总结(十四)
- GOF23的一些总结(十五)
- GOF23的一些总结(十六)
- GOF23的一些总结(十八)
- GOF23的一些总结(十九)
- springMVC + jsonP
- 解决ScrollView嵌套viewpager滑动冲突
- openDeviceLocked
- Spring Cloud 配置服务消费者和断路器
- nsq topic和channel的区别
- GOF23的一些总结(十三)
- Blockskits (二)
- jQuery图片无缝滑动效果的两种实现方式
- SpringMVC @ResponseBody 返回json date 转换
- dllimport与dllexport作用与区别
- MySQL5.0+提示字段没有默认值(doesn’t have a default value)的解决方法
- Qt Qwdget 汽车仪表知识点拆解8 淡入效果
- java类加载 Constructor类
- mixsum