最もよく使われるjs設計モードのまとめ

9751 ワード

ポリシー・モード
ifスタックを解決する最善の方法は何ですか?答:ポリシーモード
コア
アルゴリズムの使用とアルゴリズムの実現を分離する.ポリシー・モードに基づくプログラムは、少なくとも2つの部分から構成される.第1の部分は、特定のアルゴリズムをカプセル化し、特定の計算プロセスを担当するポリシー・クラス(jsonオブジェクトを構築することと理解される)のセットである.2つ目のセクションは環境クラスContextで、Contextはお客様の要求を受け入れ、その後、あるポリシークラスに要求を委任します.=このオブジェクトを使用する必要があります.
//       (   )
var levelMap = {
    S: 10,
    A: 8,
    B: 6,
    C: 4
};

//    
var scoreLevel = {
    basicScore: 80,

    S: function() {
        return this.basicScore + levelMap['S']; 
    },

    A: function() {
        return this.basicScore + levelMap['A']; 
    },

    B: function() {
        return this.basicScore + levelMap['B']; 
    },

    C: function() {
        return this.basicScore + levelMap['C']; 
    }
}

//   
function getScore(level) {
    return scoreLevel[level] ? scoreLevel[level]() : 0;
}

console.log(
    getScore('S'),
    getScore('A'),
    getScore('B'),
    getScore('C'),
    getScore('D')
); // 90 88 86 84 0

プロキシモード
コア
エージェント・モードには主に3つのタイプがあります.保護エージェント、仮想エージェント、キャッシュ・エージェント保護エージェントは、主にアクセス主体の制限行為を実現します.マスター関数の外に制限関数がセットされており、フィルタリング、ジッタ防止、マルチトラフィック呼び出しの方法でパラメータを処理する場合によく見られます.
//   ,    
function sendMsg(msg) {
    console.log(msg);
}

//   ,       
function proxySendMsg(msg) {
    //         
    if (typeof msg === 'undefined') {
        console.log('deny');
        return;
    }
    
    //         
    msg = ('' + msg).replace(/ \s* /g, '');

    sendMsg(msg);
}


sendMsg('       '); //        
proxySendMsg('      '); //  
proxySendMsg(); // deny

パブリッシュ→サブスクリプションモード
このモデルは実際にビジネスコードを書くのが難しく,フレームワーク設計によく見られる.例えばvueのイベントリスニングwatcher更新domは、このモードを使用する.
コア
オブジェクト間の1対多の依存関係を定義し、1つのオブジェクトの状態が変化すると、それに依存するすべてのオブジェクトが通知されます.