最もよく使われるjs設計モードのまとめ
9751 ワード
ポリシー・モード
ifスタックを解決する最善の方法は何ですか?答:ポリシーモード
コア
アルゴリズムの使用とアルゴリズムの実現を分離する.ポリシー・モードに基づくプログラムは、少なくとも2つの部分から構成される.第1の部分は、特定のアルゴリズムをカプセル化し、特定の計算プロセスを担当するポリシー・クラス(jsonオブジェクトを構築することと理解される)のセットである.2つ目のセクションは環境クラスContextで、Contextはお客様の要求を受け入れ、その後、あるポリシークラスに要求を委任します.=このオブジェクトを使用する必要があります.
プロキシモード
コア
エージェント・モードには主に3つのタイプがあります.保護エージェント、仮想エージェント、キャッシュ・エージェント保護エージェントは、主にアクセス主体の制限行為を実現します.マスター関数の外に制限関数がセットされており、フィルタリング、ジッタ防止、マルチトラフィック呼び出しの方法でパラメータを処理する場合によく見られます.
パブリッシュ→サブスクリプションモード
このモデルは実際にビジネスコードを書くのが難しく,フレームワーク設計によく見られる.例えばvueのイベントリスニングwatcher更新domは、このモードを使用する.
コア
オブジェクト間の1対多の依存関係を定義し、1つのオブジェクトの状態が変化すると、それに依存するすべてのオブジェクトが通知されます.
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つのオブジェクトの状態が変化すると、それに依存するすべてのオブジェクトが通知されます.