生活随笔
收集整理的這篇文章主要介紹了
JS模式--职责链模式
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
- 職責鏈模式的定義:使用多個對象都有機會處理請求,從而避免請求的發送者和接收者之間的耦合關系,將這些對象連成一條鏈,
- 并沿著這條鏈條傳遞下去,直到有一個對象處理它為止。
var order500 =
function (ordertype, pay, stock) {if (ordertype === 1 && pay ==
true) {console.log("500元定金,100元優惠券"
);} else {return 'next'
;}};var order200 =
function (ordertype, pay, stock) {if (ordertype === 2 && pay ==
true) {console.log("200元定金,50元優惠券"
);} else {return 'next'
;}};var orderNormal =
function (ordertype, pay, stock) {if (stock>0
) {console.log("普通購買無優惠券"
);} else {console.log("手機庫存不足"
);}};var Chain =
function (fn) {this.fn =
fn;this.successor =
null;};Chain.prototype.setNext =
function (succ) {this.successor =
succ;};Chain.prototype.passRequest =
function () {var ret =
this.fn.apply(
this, arguments);if (ret === 'next'
) {return this.successor &&
this.successor.passRequest.apply(
this.successor, arguments);}return ret;};var chainorder500 =
new Chain(order500);var chainorder200 =
new Chain(order200);var chainorderNormal =
new Chain(orderNormal);chainorder500.setNext(chainorder200);chainorder200.setNext(chainorderNormal);chainorder500.passRequest(1,
true, 500
);chainorder500.passRequest(2,
true, 500
);chainorder500.passRequest(3,
true, 500
);chainorder500.passRequest(1,
false, 0);
- 通過職責鏈模式,我們可以靈活的添加,移除修改鏈中的節點順序。
- 下面我們用AOP實現職責鏈
Function.prototype.after =
function (fn) {var self =
this;return function () {var ret = self.apply(
this, arguments);if (ret === 'next'
) {return fn.apply(
this, arguments);}return ret;}};var order =
order500.after(order200).after(orderNormal);order(1,
true, 500
);order(2,
true, 500
);order(1,
false, 500);
轉載于:https://www.cnblogs.com/meiyh/p/6510233.html
總結
以上是生活随笔為你收集整理的JS模式--职责链模式的全部內容,希望文章能夠幫你解決所遇到的問題。
如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。