近期看了 mybatis 的源碼,發現二級緩存這塊用了裝飾器模式將各個功能的緩存進行嵌套,源碼上也是講到使用了裝飾器模式,但是看著跟責任鏈模式類似,本著搞清楚的想法,搜了很多資料,看了書籍《Head First 設計模式》上對于裝飾器模式和責任鏈模式的講解,思考如下
裝飾器模式
特點
通過委托來實現(一般是定義了一個 delegate 變量來引用定義的操作的接口),流程中的各個節點都參與了處理,運行時動態處理。
使用場景
適用于靈活變動需要組合處理的情況,即協作處理,各個節點無阻塞,直到執行到最底層的節點,需要反饋會逆序返回。
編碼形式
簡單,對于執行的操作只需要調用一次即可,各個具體裝飾類實現會鏈式調用委托對象的方法進行處理。
使用案例
spring 中的 aop 實現的事務管理和日志管理。
書籍《Head First 設計模式》上對于裝飾器模式用了一個飲料加配料的例子來講解這個問題。
責任鏈模式
特點
各個節點經過了流轉,但是不一定進行了處理(能處理就處理,不能處理就走過場轉交給別人),即使處理了不一定有結果。自己處理不了的交給別人。
使用場景
適用于對于某些操作可能指定了一系列操作步驟(例如審批),各個步驟都需要執行。
編碼形式
麻煩,對于執行的操作每個過程需要編碼實現。
使用案例
工作流審批
javaee 中的 filter chain
參考鏈接
https://blog.csdn.net/qq_42449106/article/details/131542919
https://blog.csdn.net/jiadajing267/article/details/106889562
https://www.cnblogs.com/darope/p/12695256.html