責任鏈模式

2022-06-22 01:21:11 字數 1122 閱讀 1332

再來認真的學習一下責任鏈模式:

示例:/**

* 責任鏈模式

*/var order500 = function (ordertype, ispaid, stock) else

}var order200 = function (ordertype, ispaid, stock) else

}var ordernormal = function (ordertype, ispaid, stock) else

}// 給函式原型新增方法 after

function.prototype.after = function (fn) else}}

var order = order500.after(order200).after(ordernormal)

order(1, true, 10)

責任鏈在23種設計模式中的這裡:

(行為型模式——責任鏈模式)

分析一下示例**:

order500.after(order200)

這樣操作後返回的是乙個函式,

// 返回的是乙個函式

return function () else

}函式的第一行是拿夫層閉包函式將this和arguments傳進去並執行,

如果外面閉包返回的是'nextsuccessor' 就執行fn函式,並將fn函式的結果return

否則return的是沒有值的 (即:return )

分析一下三個或更多chain起來的情況

order500.after(order200).after(ordernormal)

返回的乙個函式,先執行第一行let ret = (執行外面的閉包)

到了外面這層閉包中還是執行第一行let ret =(執行這層外面的閉包)

如果返回的是'nextsuccessor'就會執行ret 並將ret的接回返回給下一層

一旦有一層返回了return 空(即沒有返回'nextsuccessor  

就會一直向下傳遞,每層都執行return 一直return到最後

呼叫棧中 函式棧幀全部出棧

責任鏈模式

責任鏈模式 chain of responsibility 的目標是使多個物件都有機會處理請求,從而避免請求的傳送者和接收者之間的耦合關係。將這些物件連成一條鏈,並沿著這條鏈傳遞請求,直到有乙個物件處理它為止。舉個例子。你到銀行去辦理業務,只是簡單的存個錢,也許atm就解決你的問題。如果你是為了交費...

責任鏈模式

有3個request與3個handler,每個request由相應的handler來處理,當乙個handler與request不匹配時則傳遞給下乙個handler來處理 inte ce request class request1 implements request class request2 ...

責任鏈模式

了解了一下責任鏈模式,簡單的說下自己的理解吧 責任鏈就是說待處理的資料在request的時候,先經過filter1的處理,再經過filter2的處理,然後response時,先經過filter2的處理,在經過filter1的處理。實現思路是filterchain包括filter1和filter2,同...