メディエーターパターンの機能は、「メディエーター」とも呼ばれるオブジェクト間の緊密な結合関係を取り外すことです。すべてのオブジェクトは、互いを参照するのではなく、仲介オブジェクトを介して通信します。したがって、オブジェクトが変更された場合、中間に通知する必要があります。
たとえば、空港のコマンドタワーである各航空機は、コマンドタワーと通信するだけです。コマンドタワーは、各航空機の飛行ステータスを知っており、すべての離陸時間と着陸時間を手配したり、ルートを調整したりできます。
仲介モデルは、ディミティアの法律、つまり最小の知識の原則に準拠しています。つまり、オブジェクトは別のオブジェクトについてできるだけ少ないことを知らないことを意味します。オブジェクト間のカップリングが高すぎる場合、オブジェクトを変更すると多くのオブジェクトに影響し、維持が困難です。オブジェクトのカップリングがタイトな場合、他のオブジェクトに影響を与えることなく、1つのオブジェクトを変更することは困難です。
オブジェクト間の複雑な結合が呼び出しと維持の困難を引き起こし、これらのカップリングの学位がプロジェクトの変更と指数関数的に成長する場合、中間パターンでコードをリファクタリングすることを検討できます!メディエーターは、デカップリングを通じてコードの保守性を改善します。
例1:ゲーム
Playerオブジェクトは、player()constructorを介して作成され、独自のポイントと名前属性があります。プロトタイプのPlay()メソッドは、それ自体にポイントを追加し、仲介者に通知する責任があります。
function player(name){this.points = 0; this.name = name;} player.prototype.play = function(){this.points += 1; mediator.played();};スコアボードオブジェクト(スコアボード)には更新()メソッドがあります。これは、各プレイヤーがプレイが終了した後に中間によって呼び出されます。分析は、プレーヤーに関する情報をまったく知らず、スコアを節約しません。仲介者から与えられたスコアを表示する責任のみが責任を負います。
var scoreboard = {要素:document.getElementById( 'results')、update:function(score){var i、msg = ''; for(i in score){if(score.hasownproperty(i)){msg + = '<p> <strong>' + i + '<// strong>:'; msg += score [i]; msg += '<// p>'; }} this.element.innerhtml = msg; }};次に、メディエーターオブジェクト(メディエーター)を見てみましょう。ゲームが初期化されたら、setup()メソッドでプレーヤーを作成し、その後の使用のためにプレーヤー属性を配置します。再生()メソッドは、各ラウンドの後にプレーヤーによって呼び出されます。スコアハッシュテーブルを更新し、ディスプレイ用のスコアボードに渡します。最後の方法は、キーボードイベントを処理し、どのプレーヤーがそれを再生するかを決定し、それを通知するKeypress()です。
var mediator = {players:{}、setup:function(){var players = this.players; player.home = new Player( 'home'); player.guest = new Player( 'Guest'); }、play:function(){var players = this.players、score = {home:player.home.points、guest:players.guest.points}; scoreboard.update(score); }、keypress:function(e){e = e || window.event; // ie if(e.which === 49){// key "1" mediator.players.home.play();戻る; } if(e.which === 48){// key "0" mediator.players.guest.play();戻る; }}};最後のことは、ゲームを初期化して終了することです。
// go!mediator.setup(); window.onkeypress = mediator.keypress; // 30 secondetimeout(function(){window.onkeypress = null; alert( 'game over!');}、30000);例2:携帯電話の販売
var goods = {// inventory 'red | 32g':3、 '| 16g':5、 'blue | 32g':3、 'blue | 16g':6} // id( 'numberinput')、colorinfo = id( 'colorinfo')、memoryinfo = id( 'memoryinfo')、numberinfo = id( 'numberinfo')、nextbtn = id( 'nextbtn'){nextbtn '); Goods [color+'+メモリ]; number innerhtml = nextbtn.innerhtml = nextbtn.disabled nextbtn.innerhtml " mediator.changed(this);} numberinput.onchange = function(){mediator.changed(this);}参照:「JavaScriptパターン」「JavaScriptのデザインパターンと開発の実践」
上記はこの記事のすべての内容です。みんなの学習に役立つことを願っています。誰もがwulin.comをもっとサポートすることを願っています。