tomcat 中乙個最容易發現的設計模式就是責任鏈模式,這個設計模式也是 tomcat 中 container 設計的基礎,整個容器的就是通過乙個鏈連線在一起,這個鏈一直將請求正確的傳遞給最終處理請求的那個 servlet。
責任鏈模式,就是很多物件有每個物件對其下家的引用而連線起來形成一條鏈,請求在這條鏈上傳遞,直到鏈上的某個物件處理此請求,或者每個物件都可以處理請求,並傳給下一家,直到最終鏈上每個物件都處理完。這樣可以不影響客戶端而能夠在鏈上增加任意的處理節點。
通常責任鏈模式包含下面幾個角色:
tomcat 中責任鏈模式的類結構圖如下:
圖 5. tomcat 責任鏈模式的結構圖
實際上 pipeline 和 valve 是擴充套件了這個鏈的功能,使得在鏈往下傳遞過程中,能夠接受外界的干預。pipeline 就是連線每個子容器的管子,裡面傳遞的 request 和 response 物件好比管子裡流的水,而 valve 就是這個管子上開的乙個個小口子,讓你有機會能夠接觸到裡面的水,做一些額外的事情。
為了防止水被引出來而不能流到下乙個容器中,每一段管子最後總有乙個節點保證它一定能流到下乙個子容器,所以每個容器都有乙個 standard***valve。只要涉及到這種有鏈式是處理流程這是乙個非常值得借鑑的模式。
tomcat原始碼 責任鏈設計模式
沒有demo的設計模式部落格沒有靈魂 最近開發個專案,剛好需要用到責任鏈設計模式,就重溫了tomcat中pipeline value責任鏈原始碼,剛好在這裡記下筆記。先來考考大家,怎麼用 完成以下需求?工廠安裝一台汽車,需要經過一套完整操作流水線,安裝引擎 安裝窗子 噴漆 質量檢查,當所有的流程依次...
設計模式 責任鏈
使用情況描述 某人向銀行借錢 借1w一下一般櫃員就可以解決,借2w一下一般經理就能解決,如果借更多就需要主管才能解決。這就是乙個責任鏈,根據條件的不同,分別進行複雜的邏輯運算。if,switch都可以進行這樣的操作,但是需要在每一層進行一次複雜的操作。責任鏈模式是一種物件的行為模式。在責任鏈模式裡,...
責任鏈設計模式
責任鏈的應用場景 簡單使用責任鏈模式拆分 servlet api 中的過濾器 模擬servlet中的request物件 desc模擬 servlet 中的 request 物件 模擬servlet中的response物件 desc模擬 servlet 中的 response 物件 過濾器抽象層 de...