01
—
責任鏈模式的實現
假設一個出差任務的流程需要審批出差行程和出差報銷金額。那么,對應兩個部門的審核。我們先定義一個出差任務Task類:
然后,我們定義一個抽象的處理類Handler,其中具體的處理方法Handle交給子類去實現。
然后,出差行程的審核者繼承了Handler,并實現了其中的Handle方法。其中,處理成功,需要判斷是否有下一個Handler,如果有則傳遞下去。
然后繼續實現出差金額的審核者MoneyHandler,其處理思路和上面類似。
測試類如下,首先創建出差任務。然后在應用層設置處理流程(即有哪幾個Handler),然后從第一個流程開始啟動。
測試結果如下,從測試結果可以看出,正常處理。如果某一個審核不通過,則會終止當前的Handler向下傳播。
02
—
Netty中的源碼
在Netty中的Pipeline上是基于鏈表實現的責任鏈。在Pipeline上添加Handler,最終Handler會在責任鏈上傳遞。
具體可以參考Netty中的源碼。
此外,在Servlet中的Filter也是基于責任鏈模式實現的,與上面的案例實現方式一致。