国产一级a片免费看高清,亚洲熟女中文字幕在线视频,黄三级高清在线播放,免费黄色视频在线看

打開APP
userphoto
未登錄

開通VIP,暢享免費電子書等14項超值服

開通VIP
請求的鏈式處理——職責鏈模式(二)
16.2 職責鏈模式概述
很多情況下,在一個軟件系統(tǒng)中可以處理某個請求的對象不止一個,例如SCM系統(tǒng)中的采購單審批,主任、副董事長、董事長和董事會都可以處理采購單,他們可以構(gòu)成一條處理采購單的鏈式結(jié)構(gòu),采購單沿著這條鏈進行傳遞,這條鏈就稱為職責鏈。職責鏈可以是一條直線、一個環(huán)或者一個樹形結(jié)構(gòu),最常見的職責鏈是直線型,即沿著一條單向的鏈來傳遞請求。鏈上的每一個對象都是請求處理者,職責鏈模式可以將請求的處理者組織成一條鏈,并讓請求沿著鏈傳遞,由鏈上的處理者對請求進行相應(yīng)的處理,客戶端無須關(guān)心請求的處理細節(jié)以及請求的傳遞,只需將請求發(fā)送到鏈上即可,實現(xiàn)請求發(fā)送者和請求處理者解耦。
職責鏈模式定義如下:
職責鏈模式(Chain of Responsibility  Pattern):避免請求發(fā)送者與接收者耦合在一起,讓多個對象都有可能接收請求,將這些對象連接成一條鏈,并且沿著這條鏈傳遞請求,直到有對象處理它為止。職責鏈模式是一種對象行為型模式。
職責鏈模式結(jié)構(gòu)的核心在于引入了一個抽象處理者。職責鏈模式結(jié)構(gòu)如圖16-2所示:
在職責鏈模式結(jié)構(gòu)圖中包含如下幾個角色:
● Handler(抽象處理者):它定義了一個處理請求的接口,一般設(shè)計為抽象類,由于不同的具體處理者處理請求的方式不同,因此在其中定義了抽象請求處理方法。因為每一個處理者的下家還是一個處理者,因此在抽象處理者中定義了一個抽象處理者類型的對象(如結(jié)構(gòu)圖中的successor),作為其對下家的引用。通過該引用,處理者可以連成一條鏈。
● ConcreteHandler(具體處理者):它是抽象處理者的子類,可以處理用戶請求,在具體處理者類中實現(xiàn)了抽象處理者中定義的抽象請求處理方法,在處理請求之前需要進行判斷,看是否有相應(yīng)的處理權(quán)限,如果可以處理請求就處理它,否則將請求轉(zhuǎn)發(fā)給后繼者;在具體處理者中可以訪問鏈中下一個對象,以便請求的轉(zhuǎn)發(fā)。
在職責鏈模式里,很多對象由每一個對象對其下家的引用而連接起來形成一條鏈。請求在這個鏈上傳遞,直到鏈上的某一個對象決定處理此請求。發(fā)出這個請求的客戶端并不知道鏈上的哪一個對象最終處理這個請求,這使得系統(tǒng)可以在不影響客戶端的情況下動態(tài)地重新組織鏈和分配責任。
職責鏈模式的核心在于抽象處理者類的設(shè)計,抽象處理者的典型代碼如下所示:
abstract class Handler { //維持對下家的引用protected Handler successor; public void setSuccessor(Handler successor) { this.successor=successor; } public abstract void handleRequest(String request);}
上述代碼中,抽象處理者類定義了對下家的引用對象,以便將請求轉(zhuǎn)發(fā)給下家,該對象的訪問符可設(shè)為protected,在其子類中可以使用。在抽象處理者類中聲明了抽象的請求處理方法,具體實現(xiàn)交由子類完成。
具體處理者是抽象處理者的子類,它具有兩大作用:第一是處理請求,不同的具體處理者以不同的形式實現(xiàn)抽象請求處理方法handleRequest();第二是轉(zhuǎn)發(fā)請求,如果該請求超出了當前處理者類的權(quán)限,可以將該請求轉(zhuǎn)發(fā)給下家。具體處理者類的典型代碼如下:
class ConcreteHandler extends Handler { public void handleRequest(String request) { if (請求滿足條件) { //處理請求 } else { this.successor.handleRequest(request); //轉(zhuǎn)發(fā)請求 } }}
在具體處理類中通過對請求進行判斷可以做出相應(yīng)的處理。
需要注意的是,職責鏈模式并不創(chuàng)建職責鏈,職責鏈的創(chuàng)建工作必須由系統(tǒng)的其他部分來完成,一般是在使用該職責鏈的客戶端中創(chuàng)建職責鏈。職責鏈模式降低了請求的發(fā)送端和接收端之間的耦合,使多個對象都有機會處理這個請求。
本站僅提供存儲服務(wù),所有內(nèi)容均由用戶發(fā)布,如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點擊舉報
打開APP,閱讀全文并永久保存 查看更多類似文章
猜你喜歡
類似文章
職責鏈模式——行為型模式(1)
C#設(shè)計模式系列:職責鏈模式(Chain of Responsibility)
責任鏈模式(Chain of Responsibility Pattern)
設(shè)計模式(13) 職責鏈模式
Java設(shè)計模式之責任鏈模式、職責鏈模式
職責鏈模式(Chain of Responsibility Pattern)
更多類似文章 >>
生活服務(wù)
分享 收藏 導長圖 關(guān)注 下載文章
綁定賬號成功
后續(xù)可登錄賬號暢享VIP特權(quán)!
如果VIP功能使用有故障,
可點擊這里聯(lián)系客服!

聯(lián)系客服