簡介
責任鏈模式在面向對象程式設計里是一種軟體設計模式,它包含了一些命令對象和一系列的處理對象。每一個處理對象決定它能處理哪些命令對象,它也知道如何將它不能處理的命令對象傳遞給該鏈中的下一個處理對象。該模式還描述了往該處理鏈的末尾添加新的處理對象的方法。
角色
責任鏈模式涉及到的角色如下所示:
● 抽象處理者(Handler)角色:定義出一個處理請求的接口。如果需要,接口可以定義 出一個方法以設定和返回對下家的引用。這個角色通常由一個Java抽象類或者Java接口實現。上圖中Handler類的聚合關係給出了具體子類對下家的引用,抽象方法handleRequest()規範了子類處理請求的操作。
● 具體處理者(ConcreteHandler)角色:具體處理者接到請求後,可以選擇將請求處理掉,或者將請求傳給下家。由於具體處理者持有對下家的引用,因此,如果需要,具體處理者可以訪問下家。
Java代碼示例
以下的日誌類(logging)例子演示了該模式。 每一個logging handler首先決定是否需要在該層做處理,然後將控制傳遞到下一個logging handler。程式的輸出是:
Writing to debug output: Entering function y. Writing to debug output: Step1 completed. Sending via e-mail: Step1 completed. Writing to debug output: An error has occurred. Sending via e-mail: An error has occurred. Writing to stderr: An error has occurred.
注意:該例子不是日誌類的推薦實現方式。
同時,需要注意的是,通常在責任鏈模式的實現中,如果在某一層已經處理了這個logger,那么這個logger就不會傳遞下去。在我們這個例子中,訊息會一直傳遞到最底層不管它是否已經被處理。