设计模式之职责链模式
定義:使多個(gè)對(duì)象都有機(jī)會(huì)處理請(qǐng)求,從而避免了請(qǐng)求的發(fā)送者和接收者之間的耦合關(guān)系。將這些對(duì)象連成一條鏈,并沿著這條鏈傳遞該請(qǐng)求,直到有對(duì)象處理它為止。
類型:行為類模式
類圖:
責(zé)任連模式的結(jié)構(gòu)
??????? 責(zé)任連模式的類圖非常簡單,它由一個(gè)抽象地處理類和它的一組實(shí)現(xiàn)類組成:
- 抽象處理類:抽象處理類中主要包含一個(gè)指向下一處理類的成員變量nextHandler和一個(gè)處理請(qǐng)求的方法handRequest,handRequest方法的主要主要思想是,如果滿足處理的條件,則有本處理類來進(jìn)行處理,否則由nextHandler來處理。
- 具體處理類:具體處理類主要是對(duì)具體的處理邏輯和處理的適用條件進(jìn)行實(shí)現(xiàn)。
適用場景:
1、有多個(gè)的對(duì)象可以處理一個(gè)請(qǐng)求,哪個(gè)對(duì)象處理該請(qǐng)求運(yùn)行時(shí)刻自動(dòng)確定;
2、在不明確指定接收者的情況下,向多個(gè)對(duì)象中的一個(gè)提交一個(gè)請(qǐng)求;
3、處理一個(gè)請(qǐng)求的對(duì)象集合應(yīng)被動(dòng)態(tài)指定。
在職責(zé)鏈模式里,很多對(duì)象由每一個(gè)對(duì)象對(duì)其下家的引用而連接起來形成一條鏈。請(qǐng)求在這個(gè)鏈上傳遞,直到鏈上的某一個(gè)對(duì)象決定處理此請(qǐng)求。發(fā)出這個(gè)請(qǐng)求的客戶端并不知道鏈上的哪一個(gè)對(duì)象最終處理這個(gè)請(qǐng)求,這使得系統(tǒng)可以在不影響客戶端的情況下動(dòng)態(tài)地重新組織鏈和分配責(zé)任。
?
職責(zé)鏈模式的主要優(yōu)點(diǎn)在于可以降低系統(tǒng)的耦合度,簡化對(duì)象的相互連接,同時(shí)增強(qiáng)給對(duì)象指派職責(zé)的靈活性,增加新的請(qǐng)求處理類也很方便;其主要缺點(diǎn)在于不能保證請(qǐng)求一定被接收,且對(duì)于比較長的職責(zé)鏈,請(qǐng)求的處理可能涉及到多個(gè)處理對(duì)象,系統(tǒng)性能將受到一定影響,而且在進(jìn)行代碼調(diào)試時(shí)不太方便。在大學(xué)里面當(dāng)班干部,時(shí)常要向上級(jí)申請(qǐng)各方面的東西。譬如申請(qǐng)全班外出秋游,普通同學(xué)將申請(qǐng)表交給班長,班長簽字之后交給輔導(dǎo)員,輔導(dǎo)員批準(zhǔn)之后上交到主任辦公室…就是這樣,一個(gè)請(qǐng)求(這里是一份申請(qǐng)表)有時(shí)候需要經(jīng)過好幾個(gè)級(jí)別的處理者(這里是輔導(dǎo)員、主任)的審查才能夠最終被確定可行與否。
在這里表現(xiàn)出來的是一個(gè)職責(zé)鏈,即不同的處理者對(duì)同一個(gè)請(qǐng)求可能擔(dān)負(fù)著不同的處理方式、權(quán)限,但是我們希望這個(gè)請(qǐng)求必須到達(dá)最終拍板的處理者(否則秋游就沒戲了)。這種關(guān)系就很適合使用職責(zé)鏈模式了。
類圖結(jié)構(gòu)如下:
?代碼實(shí)現(xiàn)如下:
?
?
?
?
?
測試結(jié)果:
1、對(duì)于每一個(gè)請(qǐng)求都需要遍歷職責(zé)鏈,性能是個(gè)問題;
2、抽象處理者 AbstractHandler 類中的 handleRequest() 方法中使用了遞歸,棧空間的大小也是個(gè)問題。
?
參考:http://blog.csdn.net/zhengzhb/article/details/7568676
http://haolloyin.blog.51cto.com/1177454/342166/
http://blog.csdn.net/qq7342272/article/details/6921524
http://blog.csdn.net/hguisu/article/details/7547231
http://www.cnblogs.com/java-my-life/archive/2012/05/28/2516865.html
http://www.cnblogs.com/xudong-bupt/p/3617860.html
轉(zhuǎn)載于:https://www.cnblogs.com/manmanlu/p/5732979.html
總結(jié)
以上是生活随笔為你收集整理的设计模式之职责链模式的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Native与H5交互的一些解决方法
- 下一篇: asp.net ajax控件工具集 Au