您的位置:首页 > 其它

设计模式之职责链模式

2017-08-06 16:34 183 查看

职责链设计模式

*职责链设计模式:使多个对象都有机会处理请求,从而避免请求的发送者和接收者之间的耦合关系。

* 将这个对象连成一条链,并沿着这条链传递该请求,直到有一个对象处理位置。

职责链设计模式的角色:

请求处理者接口(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 Concrete
4000
Handler1();
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
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: