定義:使多個對象都有機會處理請求,從而避免請求的發送者和接收者之間的耦合關係。將這些對象連成一條鏈,並沿着這條鏈傳遞該請求,直到有一個對象處理它爲止。
代碼:
<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);
}
}
}