职责链设计模式
*职责链设计模式:使多个对象都有机会处理请求,从而避免请求的发送者和接收者之间的耦合关系。
* 将这个对象连成一条链,并沿着这条链传递该请求,直到有一个对象处理位置。
职责链设计模式的角色:
请求处理者接口(Handler):定义一个处理请求的接口,可以实现后继链;
请求处理者实现(ConcreteHandler):请求处理接口的实现,如果它可以处理请求,就处理,否则就将该请求转发给它的后继者。
Handler类,定义一个处理请求的接口。
/**
* 定义一个处理请求的接口
* @author zzj
*
*/
public abstract class Handler {
//持有后继的责任对象
protected Handler successor;
//设置后继的责任对象
public void setSuccssor(Handler successor){
this.successor = successor;
}
//处理对象
public abstract void HandlerRequest(int request);
}
* 具体处理者类
* 处理它所负责的请求,可访问它的后继者,如果可处理该请求,就处理,否则就将该请求转发给它的后继者。
/**
* 具体处理者类
* 处理它所负责的请求,可访问它的后继者,如果可处理该请求,就处理,否则就将该请求转发给它的后继者。
* @author zzj
*
*/
public class ConcreteHandler1 extends Handler {
@Override
public void HandlerRequest(int request) {
if(request >= 0 && request < 10){
System.out.println("ConcreteHandler1处理请求"+request);
}else if(successor != null){
//转移到下一位
successor.HandlerRequest(request);
}
}
}
/**
* 具体处理者类
* 处理它所负责的请求,可访问它的后继者,如果可处理该请求,就处理,否则就将该请求转发给它的后继者。
* @author zzj
*
*/
public class ConcreteHandler2 extends Handler {
@Override
public void HandlerRequest(int request) {
if(request >= 10 && request < 20){
System.out.println("ConcreteHandler2处理请求"+request);
}else if(successor != null){
successor.HandlerRequest(request);
}
}
}
/**
* 具体处理者类
* 处理它所负责的请求,可访问它的后继者,如果可处理该请求,就处理,否则就将该请求转发给它的后继者。
* @author zzj
*
*/
public class ConcreteHandler3 extends Handler {
@Override
public void HandlerRequest(int request) {
if(request >= 20 && request < 30){
System.out.println("ConcreteHandler3处理请求"+request);
}else if(successor != null){
successor.HandlerRequest(request);
}
}
}
客户端代码,向链上的具体处理者对象提交请求
public class Test {
public static void main(String[] args){
//设置职责链
Handler handler1 = new ConcreteHandler1();
Handler handler2 = new ConcreteHandler2();
Handler handler3 = new ConcreteHandler3();
handler1.setSuccssor(handler2);
handler2.setSuccssor(handler3);
int[] requests = {2,8,10,15,20,25,30};
for(int request : requests){
handler1.HandlerRequest(request);
}
}
}
输出结果:
ConcreteHandler1处理请求2
ConcreteHandler1处理请求8
ConcreteHandler2处理请求10
ConcreteHandler2处理请求15
ConcreteHandler3处理请求20
ConcreteHandler3处理请求25