第十九篇 設計模式--職責鏈模式

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

代碼:

<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);
		}
	}
	
}





發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章