目的:形成一个链式关系,更加体系化。
举例:员工请假,首先需要向部门经理提交请假条,如果请假天数大,那么就需要部门经理的领导来处理,这就是责任链模式
/**
* 员工类
* @author tiger
*
*/
public class Employee {
private String name;
private int days;
private String reason;
public Employee(String name, int days, String reason) {
super();
this.name = name;
this.days = days;
this.reason = reason;
}
<span style="white-space:pre"> </span>//以下是get/set方法
}
/**
* 领导抽象类
* @author tiger
*
*/
public abstract class Leader {
protected String name;
protected Leader nextLeader;
public void setLeader(Leader nextLeader) {
this.nextLeader = nextLeader;
}
public Leader(String name) {
super();
this.name = name;
}
public abstract void handleRequest(Employee e);
}
/**
* 部门领导
* @author tiger
*
*/
public class ApartmentManager extends Leader {
public ApartmentManager(String name) {
super(name);
}
@Override
public void handleRequest(Employee e) {
if(e.getDays()<3){
System.out.println("部门经理批准");
}else{
if(nextLeader != null){
System.out.println(this.name+"权限不够,请求领导处理");
nextLeader.handleRequest(e);
}
}
}
}
/**
* 总经理
* @author tiger
*
*/
public class Manager extends Leader {
public Manager(String name) {
super(name);
}
@Override
public void handleRequest(Employee e) {
if(e.getDays()<10){
System.out.println("总经理批准");
}else{
System.out.println("驳回");
}
}
}
测试类
public class Demo {
public static void main(String[] args) {
Employee e = new Employee("Tom",9, "无");
Leader apartment = new ApartmentManager("张三");
Leader manager = new Manager("李四");
//建立责任链
apartment.setLeader(manager);
//处理请求
apartment.handleRequest(e);
}
}
实际应用:java的异常处理机制,层层处理
servlet的过滤器
struts2的拦截器等