tomcat原始碼 責任鏈設計模式

2021-10-09 07:42:59 字數 1751 閱讀 9385

沒有demo的設計模式部落格沒有靈魂:

最近開發個專案,剛好需要用到責任鏈設計模式,就重溫了tomcat中pipeline-value責任鏈原始碼,剛好在這裡記下筆記。

先來考考大家,怎麼用**完成以下需求?

工廠安裝一台汽車,需要經過一套完整操作流水線,安裝引擎 -> 安裝窗子 -> 噴漆 ->質量檢查, 當所有的流程依次走完這台汽車才安裝成功。

大家應該很快想到使用責任鏈設計模式,下面我來說說tomcat中pipeline-valve責任鏈

pipeline的流程圖

其中pipeline是一條管道,valve是乙個乙個的閥門,baisc是最後乙個閥門,水流從第乙個閥門進入,依次流過每個閥門,然後再依次返回。

下面直接上**

先定義乙個pipeline介面

public inte***ce pipeline
建立乙個安裝汽車的pipeline管道

/**

* 安裝汽車責任鏈

*/public class installcarpipeline implements pipeline

current = current.getnext();

}this.basic = valve;

}public valve getfirst()

return basic;

}@override

public void addvalve(valve valve) else

current = current.getnext();}}

}@override

public void invoke(boolean ispass)

throw new runtimeexception("責任鏈上沒有鏈閥門");

}}

定義乙個valve介面

public inte***ce valve
因為會有很多管道,我們將一些通用的變數方法放入 基礎閥門 中

public abstract class basevalve implements valve 

@override

public valve getnext()

}

具體閥門類

/**

* 安裝引擎閥門

*/public class installenginevalve extends basevalve

}/**

* 安裝窗子閥門

*/public class installwindowsvalve extends basevalve

}/**

* 噴漆閥門

*/public class spraypaintvalve extends basevalve

}/**

* 質檢閥門,為最後乙個閥門(basic)

*/public class qualityinspectionvalve extends basevalve

}

最後來個測試類

public class test 

}

測試結果如下

引擎安裝完成

窗子安裝完成

噴漆完成

質檢合格通過

噴漆交付

窗子安裝交付

引擎安裝交付

tomcat原始碼解讀 2 容器責任鏈模式的實現

責任鏈模式 責任鏈模式可以用在這樣的場景,當乙個request過來的時候,需要對這個request做一系列的加工,使用責任鏈模式可以使每個加工元件化,減少耦合。也可以使用在當乙個request過來的時候,需要找到合適的加工方式。當乙個加工方式不適合這個request的時候,傳遞到下乙個加工方法,該加...

Tomcat中的設計模式 責任鏈模式

tomcat 中乙個最容易發現的設計模式就是責任鏈模式,這個設計模式也是 tomcat 中 container 設計的基礎,整個容器的就是通過乙個鏈連線在一起,這個鏈一直將請求正確的傳遞給最終處理請求的那個 servlet。責任鏈模式,就是很多物件有每個物件對其下家的引用而連線起來形成一條鏈,請求在...

設計模式 責任鏈

使用情況描述 某人向銀行借錢 借1w一下一般櫃員就可以解決,借2w一下一般經理就能解決,如果借更多就需要主管才能解決。這就是乙個責任鏈,根據條件的不同,分別進行複雜的邏輯運算。if,switch都可以進行這樣的操作,但是需要在每一層進行一次複雜的操作。責任鏈模式是一種物件的行為模式。在責任鏈模式裡,...