那个餐饮网站,天津业之峰装修公司地址,wordpress 让导航悬浮,源代码大全定义
将能够处理同一请求的对象连成一条链#xff0c;所提交的请求沿着链传递#xff0c;链上的对象逐个判断是否有能力处理该请求#xff0c;如果能则处理#xff0c;如果不能则传递给链上的下一个对象。
责任链模式角色
抽象处理器(handler): 定义了处理器的处理方法所提交的请求沿着链传递链上的对象逐个判断是否有能力处理该请求如果能则处理如果不能则传递给链上的下一个对象。
责任链模式角色
抽象处理器(handler): 定义了处理器的处理方法并维护了下一个处理器对象的引用具体处理器(ConcreteHandler): 实现了抽象处理器的处理方法并确定了当前处理器是否可以处理如果不能处理就将请求交给下一个处理器处理
场景
打牌时轮流出牌接力赛跑大学中奖学金审批公司中公文审批公司中请假审批
开发中常见的场景
java中异常机制就是一种责任链模式。一个try可以对应多个catch当第一个catch不匹配类型则自动跳到第二个catch。servlet开发中过滤器的链式处理。struts2中拦截器的调用也是经典的责任链模式
公司里面请假条的审批流程
如果请假天数小于3天主任审批如果请假天数大于等于3天小于7天经理审批如果大于等于7天小于30天总经理审批如果大于30天提示拒绝。
代码实现
封装请假的基本信息
/*** 封装请假的基本信息*/
public class LeaveRequest {//请假对象private String name; //请假多次时间private int LeaveDays;//请假理由private String reason; public LeaveRequest(String name, int leaveDays, String reason) {super();this.name name;this.LeaveDays leaveDays;this.reason reason;}public String getName() {return name;}public int getLeaveDays() {return LeaveDays;}public String getReason() {return reason;}public void setName(String name) {this.name name;}public void setLeaveDay(int leaveDays) {LeaveDays leaveDays;}public void setReason(String reason) {this.reason reason;}
}抽象处理器(handler)
/*** 抽象类 责任链对象*/
public abstract class Leader {// 当前责任链对象名称protected String name;//责任链上的后继对象protected Leader nextLeader; public Leader(String name) {super();this.namename;}/*** 设定责任链上的后继对象* param nextLeader*/public void setNextLeader(Leader nextLeader) {this.nextLeader nextLeader;}/*** 处理请求的核心的业务抽象方法* param request*/public abstract void HandleReques(LeaveRequest request);
}具体处理器(ConcreteHandler)
/*** 主任*/
public class Director extends Leader{public Director(String name) {super(name);}Overridepublic void HandleReques(LeaveRequest request) {if(request.getLeaveDays()3){System.out.println(员工request.getName()请假天数request.getLeaveDays(),理由:request.getReason());System.out.println(主任this.name给予request.getName()请假审批通过);}else{if(null!this.nextLeader){this.nextLeader.HandleReques(request);}}}
}
/*** 经理*/
public class Manager extends Leader{public Manager(String name) {super(name);}Overridepublic void HandleReques(LeaveRequest request) {if(request.getLeaveDays()7){System.out.println(员工request.getName()请假天数request.getLeaveDays(),理由:request.getReason());System.out.println(经理this.name给予request.getName()请假审批通过);}else{if(null!this.nextLeader){this.nextLeader.HandleReques(request);}}}
}
/*** 总经理*/
public class GeneralManager extends Leader{public GeneralManager(String name) {super(name);}Overridepublic void HandleReques(LeaveRequest request) {if(request.getLeaveDays()30){System.out.println(员工request.getName()请假天数request.getLeaveDays(),理由:request.getReason());System.out.println(总经理this.name给予request.getName()请假审批通过);}else{System.out.println(此人可能想辞职审批不通过);}}
}客户端组装成链表结构调用
// 责任链模式 -----不用修改代码 就可以添加相应的子类
public static void main(String[] args) {Leader anew Director(:张三,);Leader bnew Manager(:李四,);Leader cnew GeneralManager(:王五,);//责任链上的对象关系a.setNextLeader(b);b.setNextLeader(c);//开始请假操作LeaveRequest reqnew LeaveRequest(Tom,8,相亲);a.HandleReques(req);}更多设计模式学习 设计模式(1)介绍 设计模式(2)单例模式 设计模式(3)工厂模式 设计模式(4)建造者模式 设计模式(5)原型模式 设计模式(6)桥接模式 设计模式(7)装饰器模式 设计模式(8)组合模式 设计模式(9)外观模式 设计模式(10)享元模式 设计模式(11)适配器模式 设计模式(12)代理模式 设计模式(13)模板方法模式 设计模式(14)命令模式 设计模式(15)迭代器模式 设计模式(16)观察者模式 设计模式(17)中介者模式 设计模式(18)状态模式 设计模式(19)策略模式 设计模式持续更新中…