1. 程式人生 > >責任鏈模式初體驗

責任鏈模式初體驗

昨天想到前段時間重構的程式碼,感覺不是很滿意,用的是組合模式,前前後後把物件包裹的太複雜,而且如果以後繼續擴充套件的話,想必會更加複雜,想想能不能使程式碼結構更簡單些,於是決定用責任鏈模式來改造一下。

責任鏈模式,我的理解就是一連串的操作連成一條鏈,然後按照鏈的順序來執行,這好像滿足我的業務場景。責任鏈最常見於過濾器了,過濾器因為涉及到層層過濾,可能存在多個過濾器一起使用,這就是典型的責任鏈模式了。好了,來展示一個dome,順便也讓我來捋捋責任鏈的思路。

首先,有一個公用的介面(感覺所有的設計模式都是在介面操作的基礎上完成的),介面定義了一個方法,所有操作鏈要實現的功能都寫在這個方法裡面:


然後一個鏈類,鏈實現公用的介面,鏈類有一個list屬性,用來儲存操作鏈,然後有一個新增操作的方法,當然,還有一個介面方法的實現。但是。這個實現不是實現業務,而是獲取下一個操作鏈,再去呼叫操作鏈的操作。


各個操作鏈實現公用的介面,在方法裡面實現對應的業務邏輯,然後在最後呼叫鏈的實現方法,獲取下一個鏈,再呼叫下一個鏈的實現。。。。這樣就實現了一整個責任鏈的實現了。


呼叫的時候,我們先new一個鏈的物件,然後把要執行的操作新增進去,然後執行就行了。


主要的呼叫過程是,鏈的方法——>獲取具體操作鏈物件——>呼叫操作鏈的方法——>在操作鏈的最後會呼叫鏈的方法——>獲取下一個具體操作鏈物件——>直到呼叫最後一個物件。

整個責任鏈的模式就實現了,實現起來很簡單,設計模式主要的是其中的思想,責任鏈模式解決的主要業務場景是多個一連串的操作順序執行,可以插拔式的改變操作鏈,程式碼耦合性比較低,思路也會很清晰。使用過程中也感覺出了一個缺點,那就是會建立很多個類,畢竟他一個操作就要建立一個類。當時想過用組合來解決這個問題,但是發現這樣會讓程式碼很混亂,總的來說還是思維跟不上,抽象能力還不夠。