日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

责任链

發布時間:2024/9/30 编程问答 30 豆豆
生活随笔 收集整理的這篇文章主要介紹了 责任链 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

http://www.cnblogs.com/java-my-life/archive/2012/05/28/2516865.html

責任鏈模式是一種對象的行為模式。在責任鏈模式里,很多對象由每一個對象對其下家的引用而連接起來形成一條鏈。請求在這個鏈上傳遞,直到鏈上的某一個對象決定處理此請求。發出這個請求的客戶端并不知道鏈上的哪一個對象最終處理這個請求,這使得系統可以在不影響客戶端的情況下動態地重新組織和分配責任。


從擊鼓傳花談起

  擊鼓傳花是一種熱鬧而又緊張的飲酒游戲。在酒宴上賓客依次坐定位置,由一人擊鼓,擊鼓的地方與傳花的地方是分開的,以示公正。開始擊鼓時,花束就開始依次傳遞,鼓聲一落,如果花束在某人手中,則該人就得飲酒。

  比如說,賈母、賈赦、賈政、賈寶玉和賈環是五個參加擊鼓傳花游戲的傳花者,他們組成一個環鏈。擊鼓者將花傳給賈母,開始傳花游戲。花由賈母傳給賈赦,由賈赦傳給賈政,由賈政傳給賈寶玉,又賈寶玉傳給賈環,由賈環傳回給賈母,如此往復,如下圖所示。當鼓聲停止時,手中有花的人就得執行酒令。

  擊鼓傳花便是責任鏈模式的應用。責任鏈可能是一條直線、一個環鏈或者一個樹結構的一部分。

責任鏈模式的結構

  下面使用了一個責任鏈模式的最簡單的實現。

  責任鏈模式涉及到的角色如下所示:

  ●  抽象處理者(Handler)角色:定義出一個處理請求的接口。如果需要,接口可以定義 出一個方法以設定和返回對下家的引用。這個角色通常由一個Java抽象類或者Java接口實現。上圖中Handler類的聚合關系給出了具體子類對下家的引用,抽象方法handleRequest()規范了子類處理請求的操作。

  ●  具體處理者(ConcreteHandler)角色:具體處理者接到請求后,可以選擇將請求處理掉,或者將請求傳給下家。由于具體處理者持有對下家的引用,因此,如果需要,具體處理者可以訪問下家。

源代碼

  抽象處理者角色

public abstract class Handler {/*** 持有后繼的責任對象*/protected Handler successor;/*** 示意處理請求的方法,雖然這個示意方法是沒有傳入參數的* 但實際是可以傳入參數的,根據具體需要來選擇是否傳遞參數*/public abstract void handleRequest();/*** 取值方法*/public Handler getSuccessor() {return successor;}/*** 賦值方法,設置后繼的責任對象*/public void setSuccessor(Handler successor) {this.successor = successor;}}

  具體處理者角色

public class ConcreteHandler extends Handler {/*** 處理方法,調用此方法處理請求*/@Overridepublic void handleRequest() {/*** 判斷是否有后繼的責任對象* 如果有,就轉發請求給后繼的責任對象* 如果沒有,則處理請求*/if(getSuccessor() != null){ System.out.println("放過請求");getSuccessor().handleRequest(); }else{ System.out.println("處理請求");}}}

  客戶端類

public class Client {public static void main(String[] args) {//組裝責任鏈Handler handler1 = new ConcreteHandler();Handler handler2 = new ConcreteHandler();handler1.setSuccessor(handler2);//提交請求 handler1.handleRequest();}}

  可以看出,客戶端創建了兩個處理者對象,并指定第一個處理者對象的下家是第二個處理者對象,而第二個處理者對象沒有下家。然后客戶端將請求傳遞給第一個處理者對象。

  由于本示例的傳遞邏輯非常簡單:只要有下家,就傳給下家處理;如果沒有下家,就自行處理。因此,第一個處理者對象接到請求后,會將請求傳遞給第二個處理者對象。由于第二個處理者對象沒有下家,于是自行處理請求。活動時序圖如下所示。


總結

以上是生活随笔為你收集整理的责任链的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。