設計模式之美 - 61
職責鏈模式的定義:將請求的傳送和接收解耦,讓多個接收物件都有機會處理這個請求。將這些接收物件串成一條鏈,並沿著這條鏈傳遞這個請求,直到鏈上的某個接收物件能夠處理它為止。
多個處理器處理同乙個請求,處理器a完成處理後,把請求交給處理器b,處理器b處理完成後,將請求處理給c,以此類推,鏈條上的每個處理器各自承擔各自的處理職責,所以叫作職責鏈模式。
netty 框架在處理訊息時使用的 pipeline 就是一種責任鏈模式。
目錄
一、職責鏈有兩種方式:
二、職責鏈模式的**實現
三、職責鏈模式專案應用
四、框架中的過濾器,***的實現
servlet filter :
spring interceptor:
獲取到可處理請求的處理器處理完成後,終止處理鏈條
乙個請求會走完整個處理鏈條的每乙個處理節點
1、使用模板模式,實現乙個抽象處理器父類(handler),裡面包含抽象方法dohandle(),每乙個具體是處理器類(hanldera,handlerb)實現自己的處理邏輯。
2、通過乙個鍊錶存放處理器,作為處理器鏈(handlerchain),也可採用資料來儲存處理器類,更簡單
3、通過handle()方法,實現處理類處理請求後可決定是否終端鏈條
// 抽象處理器父類
public abstract class handler
// 共用邏輯,控制節點執行完成是否退出鏈條
public final void handle1()
} // 共用邏輯,每個請求都會走完鏈條的所有節點
public final void handle2()
} // 子類所需重寫的模板方法
protected abstract boolean dohandle();
}public class handlera extends handler
}public class handlerb extends handler
}public class handlerchain
tail.setsuccessor(handler);
tail = handler;
} public void handle()
}}// 使用舉例
public static void main(string args)
}
在場景化查詢過程中,對於返回結果中的資訊進行脫敏
設計模式之美 - 63
可以攔截http請求,進行相關的限流,鑑權等操作。
servlet filter 是 servlet 規範的一部分,實現依賴於 web 容器
spring interceptor 是 spring mvc 框架的一部分,由 spring mvc 框架來提供實現。
客戶端傳送的請求,會先經過 servlet filter,然後再經過 spring interceptor,最後到達具體的業務**中。
設計模式之職責鏈模式
如果我們現在有乙個需求,乙個人他生了病,這個病要在 醫院才能看,但是這個病人並不清楚,就先去了一級醫院,一級醫院的醫生告訴他你的病要去二級醫院看,二級醫院也告訴他 你的病我這裡看不了,你要去 醫院才能看,最後他去 醫院把病看好了.這個過程直接寫成 class patient this.patient...
設計模式之職責鏈模式
職責鏈模式 使多個物件都有機會處理請求,從而避免請求的傳送者和接收者之間的耦合關係。將這些物件連成一條鏈,並沿著這條鏈傳遞該請求,直到有乙個物件處理它為止。適用場景 1 有多個的物件可以處理乙個請求,哪個物件處理該請求執行時刻自動確定 2 在不明確指定接收者的情況下,向多個物件中的乙個提交乙個請求 ...
設計模式之職責鏈模式
職責鏈模式 chain of responsibility 使多個物件都有機會處理請求,從而避免請求的傳送者和接收者之間的耦合關係。將多個物件連成一條鏈,沿著這條鏈傳遞請求直到有物件處理它為止。可以定義乙個抽象類來表示處理事件的物件,這個類首先有個處理事件的抽象方法,然後提供乙個方法設定下一級處理者...