2013-08-23 69 views
1

我看到一個教程視頻解釋責任鏈設計模式,我想我明白它是如何工作的,但我不確定何時會真正使用它。責任鏈的一些常見用法是什麼?責任鏈的常見用法?

回答

2

GoF

已知應用

幾個類庫使用責任 鏈模式處理用戶事件。它們使用不同的名稱作爲處理程序類,但是想法相同:當用戶單擊 鼠標或按下某個鍵時,將生成一個事件並沿 鏈傳遞。 Symantec的TCL庫[Sym93b]將其稱爲「Bureaucrat」,NeXT的 AppKit [Add94]使用名稱「Responder」。

圖形編輯器的Unidraw框架定義命令對象 ,它將請求封裝到組件和組件視圖對象 [VL90]。命令是請求,意思是組件視圖或組件視圖可以解釋命令以執行操作。這個 對應於 實現中描述的「作爲對象的請求」方法。組件和組件視圖可以分層構造 。組件或組件視圖可以將命令解釋轉發給其父母,其可以繼而將其轉發給其父母,等等,由此形成責任鏈。

ET ++使用責任鏈來處理圖形更新。一個 圖形對象調用InvalidateRect操作,只要它必須更新其外觀的一部分 。圖形對象本身無法處理 InvalidateRect,因爲它對上下文沒有足夠的瞭解。例如,一個圖形對象可以包含在像滾動器或變換器的變換其座標系統的對象 中。 表示該對象可能會滾動或縮放,以至於部分 不在視圖中。因此,InvalidateRect的默認實現 將請求轉發給封閉的容器對象。轉發鏈中的最後一個 對象是一個Window實例。到 窗口收到請求時,無效矩形保證 被正確轉換。該窗口處理InvalidateRect by 通知窗口系統界面並請求更新。