91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

JavaScript設計模式之職責鏈模式應用示例

發布時間:2020-09-14 16:57:57 來源:腳本之家 閱讀:152 作者:咕咚蘿卜 欄目:web開發

本文實例講述了JavaScript設計模式之職責鏈模式。分享給大家供大家參考,具體如下:

一、職責鏈的定義:

使多個對象都有機會處理請求,從而避免請求的發送者和接收者之間的耦合關系,將這些對象連成一條鏈,并沿著這條鏈傳遞該請求,直到有一個對象處理它為止。

二、實例場景說明:

某公司對公司產品-手機進行促銷活動,有以下政策:在正式購買時,已經支付過500元定金的用戶會收到100元的商城優惠卷,交200元定金的用戶可以收到50元的優惠卷,而之前沒有支付定金的用戶只能進入普通購買模式,也就是沒有優惠卷,主要危險為在庫存有限的情況下不一定能買到手機。

三、實例代碼如下:

1、創建3中購買模式的函數對象,如下:

/**
* @param: orderType 表示訂單類型
* @param: pay 表示用戶是否已經支付定金
* @param: stock 表示當前用戶普通購買的手機庫存數量,交過定金的用戶不受此限制
**/
var order500 = function( orderType, pay, stock ){
  if( orderType === 1 && pay === true)
     console.log('500元定金預購,得到100優惠卷');
  else
     return 'nextSuccessor'; //不知道下一個節點是誰,反正把請求往后面傳遞
};
var order200 = function( orderType, pay, stock){
  if( orderType === 2 && pay === true)
    console.log( '200元定金預購,得到50元優惠卷' );
  else
    return 'nextSuccessor';
};
var orderNormal = function(orderType, pay, stock){
  if(stock > 0)
    console.log('普通購買,無優惠卷');
  else
    console.log('手機庫存不足');
};

2、書寫一個把函數包裝進職責鏈節點的構造函數,如下:

var Chain = function(fn){
  this.fn = fn;
  this.successor = null;
};
Chain.prototype.setNextSuccessor = function( successor ){
  return this.successor = successor;
};
Chain.prototype.passRequest = function(){
  var ret = this.fn.apply( this, arguments );
  if( ret === 'nextSuccessor'){
    return this.successor && this.successor.passRequest.apply( this,successor, arguments );
  }
   return ret;
};

3、調用如下:

1> 把3個訂單函數分別包裝成職責鏈的節點:

var chainOrder500 = new Chain( order500 );
var chainOrder200 = new Chain( order200 );
var chainOrderNormal = new Chain( orderNormal );

2> 指定節在職責鏈中的順序:

chainOrder500.setNextSuccessor( chainOrder200 );
chainOrder200.setNextSuccessor( chainOrderNormal );

3> 把請求傳遞給第一個節點,如下:

chainOrder500.passRequest( 1, true, 500 ); //輸出:500元定金預購,得到100優惠卷
chainOrder500.passRequest( 2, true, 500 ); //輸出:200元定金預購,得到50優惠卷
chainOrder500.passRequest( 3, true, 500 ); //輸出:普通購買,無優惠卷
chainOrder500.passRequest( 1, false, 0 ); //輸出:手機庫存不足

四、職責鏈模式優點:

通過上述代碼,我們可以靈活的添加和刪除節點,以及可靈活的修改節點的順序。

更多關于JavaScript相關內容可查看本站專題:《javascript面向對象入門教程》、《JavaScript切換特效與技巧總結》、《JavaScript查找算法技巧總結》、《JavaScript錯誤與調試技巧總結》、《JavaScript數據結構與算法技巧總結》、《JavaScript遍歷算法與技巧總結》及《JavaScript數學運算用法總結》

希望本文所述對大家JavaScript程序設計有所幫助。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

千阳县| 四平市| 龙州县| 延长县| 新郑市| 黔西| 屏东市| 勃利县| 交口县| 尉犁县| 云安县| 沾益县| 奉新县| 航空| 南平市| 衡水市| 云南省| 如东县| 武隆县| 禄劝| 嵊州市| 札达县| 虹口区| 郁南县| 武清区| 桃园市| 大丰市| 龙南县| 潼南县| 息烽县| 泾阳县| 康定县| 得荣县| 铜鼓县| 沧源| 达尔| 项城市| 建德市| 临潭县| 咸宁市| 伊金霍洛旗|