JavaScript設計モードの職責チェーンパターン応用例


本論文の実例は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プログラムの設計に役に立ちます。