再來認真的學習一下責任鏈模式:
示例:/**
* 責任鏈模式
*/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,同...