使用責任鏈模式解決非同步巢狀問題

2021-09-28 16:11:30 字數 897 閱讀 7736

chain: 用於表示乙個鏈條物件

(1)定義乙個陣列,用於儲存這條鏈所有的interceptor;

(2)定義乙個param,用於儲存該鏈式呼叫所需的引數;

(3)包含乙個proceed()方法,從第乙個interceptor開始,迴圈呼叫interceptor的intercept()方法;

(4)定義乙個proceednext(interceptor interceptor),接收乙個interceptor,表示從傳入位置的下乙個interceptor繼續執行intercept()方法;

interceptor:用於執行具體邏輯

(1)包含乙個intercept(chain chain)方法,接收當前chain物件,返回乙個boolean值;

(2)當執行同步任務時,讓interceptor返回false,執行完當前interceptor會立即執行下乙個interceptor。

(3)當執行非同步任務時,讓intercept()返回true,會結束當前鏈條的呼叫,如果非同步結果返回後還需要繼續執行,則呼叫chain的proceednext(interceptor interceptor)方,會繼續執行下乙個interceptor。

param:用於儲存該鏈式呼叫所需的引數,供所有interceptor使用。

關鍵**:

public class chain }}

public void proceednext(interceptor interceptor) }}

}... ...

}

uml圖

表單巢狀問題的解決方法

在html中,表單form是不能夠巢狀使用的,例如 name form1 name form2 form form 這樣是不合法的,那麼如果我們遇到需要用到兩個表單的情況應該怎麼辦呢?解決的方法很簡單,合併兩個表單,動態改變表單提交位置。表單form中的action為空,然後在js 中改變actio...

Windows窗體巢狀問題解決

窗體巢狀 經驗豐富的visual basic開發者知道多文件介面 mdi 應用程式能夠包含子窗體,那些子窗體由mdi父窗體管理。但是如果沒有mdi的能力你怎樣實現包含巢狀窗體?例如乙個mdi子窗體也可能需要包含另乙個窗體。有時能夠使用使用者控制項 usercontrol 實現這種功能,但是如果你真的...

設計模式 如何優雅地使用責任鏈模式

責任鏈模式 chain of responsibility pattern 在 head first設計模式 一書中被稱為 剩下的模式 其實使用也是蠻多的。最近在學習netty的過程中用到了責任鏈模式,在此反過頭來重溫一下責任鏈模式。當你想要讓乙個以上的物件有機會能夠處理某個請求的時候,就使用責任鏈...