責任鏈模式

一:責任鏈模式定義(tomcat的啓動加載過程,攔截器)

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

二:責任鏈模式的特點

純責任鏈模式:一個request必須被且只能被一個handle處理。不允許request不被處理,或者被多次處理。

不純:request可以不被處理,也可以被多次處理。

抽象處理者需要定義一個protected的後繼處理者(因爲需要被子類訪問到),每一個處理者在處理之前要設置好自己的後繼處理者,這樣當自己無法處理該請求的時候,轉交給後繼者,直至整個責任鏈的所有處理者都執行完畢。具體的處理需要final修飾,以保證整個的處理流程是不可以更改

三:責任鏈模式的實現

抽象處理者:public abstract class Approver {
	protected Approver successor;
public Approver getSuccessor() {
		return successor;
	}
	//設置後繼者
	public void setSuccessor(Approver successor){
		this.successor=successor;
	}
	//抽象請求處理方法
	public abstract void processRequest(PurchaseRequest request);
}
具體處理者:public class VicePresident extends Approver {
		@Override
	public final void processRequest(int num) {
		if(num>100){
			 System.out.println("自己處理的邏輯");  
		}
		else{//無法處理就交給自己的後繼者
			this.successor.processRequest(num); // 轉發請求
		}	
	}
}
測試類:public class Client {
	public static void main(String[] args) {
		Approver director, vicePresident;
		director = new Director();
		vicePresident = new VicePresident();
		// 創建責任鏈(必須在自身執行之前指定下一個執行者,否則自己執行失敗的時候會空指針)
		director.setSuccessor(vicePresident);
		// 創建一系列請求,全部交給責任鏈的第一個處理者處理,用戶不用關心該處理者是否能夠處理該請求。即內部的實現對用戶透明
		director.processRequest(150);
		director.processRequest(30);
	}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章