定义:使多个对象都有机会处理请求,从而避免请求的发送者和接收者之间的耦合关系。将这些对象连成一条链,并沿着这条链传递该请求,直到有一个对象处理它为止。
代码:
<pre name="code" class="java">package chainofresponsibility_model;
/**
*
* @author naivor
* 职责链模式-场景类
*/
public class COFModel {
public static void main(String[] args) {
Handler handler1=new ConcreteHandler1();
Handler handler2=new ConcreteHandler2();
Handler handler3=new ConcreteHandler3();
handler1.setHandler(handler2); //设置职责链的上家和下家
handler2.setHandler(handler3);
handler1.handRequest(20); //发起请求
}
}
/**
*
* @author naivor
* 职责链模式-处理者抽象类
*/
abstract class Handler{
protected Handler handler;
public void setHandler(Handler handler) {
this.handler=handler;
}
public abstract void handRequest(int request);
}
/**
*
* @author naivor
* 职责链模式-具体处理者1类
*/
class ConcreteHandler1 extends Handler{
@Override
public void handRequest(int request) {
if (request>=0 && request<10) { //处理0-10的请求
//ConcreteHandler1的业务处理逻辑
}else if (handler!=null) {
handler.handRequest(request); //交给下家处理
}
}
}
/**
*
* @author naivor
* 职责链模式-具体处理者2类
*/
class ConcreteHandler2 extends Handler{
@Override
public void handRequest(int request) {
if (request>=10 && request<20) { //处理10-20的请求
//ConcreteHandler2的业务处理逻辑
}else if (handler!=null) {
handler.handRequest(request);
}
}
}
/**
*
* @author naivor
* 职责链模式-具体处理者3类
*/
class ConcreteHandler3 extends Handler{
@Override
public void handRequest(int request) {
if (request>=20 && request<30) { //处理20-30的请求
//ConcreteHandler3的业务处理逻辑
}else if (handler!=null) {
handler.handRequest(request);
}
}
}