1。全体的な要約
1。著者はそれについて簡単に話します
私たちの日常生活の簡単な例を見てみましょう。不動産機関に行って家を借りると、不動産機関はテナントと家主の貸手の間の仲介者を形成します。賃借人は彼が誰を賃貸するかを気にしません。家主の賃貸人は、彼が誰に賃貸するのか気にしません。この取引は、仲介者の存在のために非常に便利になりました。
ソフトウェア開発プロセス中に、複数のクラスまたはサブシステムが相互に対話する状況が必然的にあり、相互作用が非常に複雑であるため、各クラスは相互作用する必要があるクラスを知る必要があるため、結合が非常に強力に見えます。全身は1つの動きの影響を受け、その結果は非常に深刻であり、大きなクマは非常に怒っています! ~~~~(> _ <)~~~~
さて、質問が提起されたので、この号で主人公を招待してください - 中間モデルが表示されます。
仲介者の機能は、オブジェクト間の相互作用をカプセル化することです。オブジェクトの操作が他の関連するオブジェクトの変更を引き起こし、このオブジェクトがこれらの関係を単独で処理したくない場合、仲介者を見つけて、これらの厄介な関係を処理させることができます。次の小さな例を参照してください。
コードコピーは次のとおりです。
var参加者= function(name){
this.name = name;
this.chatroom = null;
};
参加者.prototype = {
send:function(message、to){
this.chatroom.send(メッセージ、this、to);
}、
受信:function(message、from){
log.add(from.name + "to" + this.name + ":" + message);
}
};
var chatroom = function(){
var参加者= {};
戻る {
登録:function(参加者){
参加者[参加者。NAME] =参加者;
参加者。chatroom= this;
}、
send:function(message、from、to){
if(to){
to.receive(メッセージ、from);
} それ以外 {
for(参加者のキー){
if(参加者[key]!== from){
参加者[key] .receive(message、from);
}
}
}
}
};
};
var log =(function(){
var log = "";
戻る {
追加:function(msg){log + = msg + "/n"; }、
show:function(){alert(log); log = ""; }
}
})();
function run(){
var yoko = new参加者( "yoko");
var John =新しい参加者( "John");
var Paul =新しい参加者( "Paul");
var ringo =新しい参加者( "ringo");
varチャットルーム= new Chatroom();
chatroom.register(yoko);
Chatroom.register(John);
Chatroom.register(Paul);
chatroom.register(ringo);
yoko.send( "必要なのは愛だけです。");
yoko.send( "私はあなたを愛しているジョンを愛しています。");
John.send(「ねえ、放送する必要はありません」、Yoko);
Paul.send( "ha、私はそれを聞いた!");
ringo.send(「ポール、どう思いますか?」、ポール);
log.show();
}
サンプルコードには4人の参加者がいます。チャットルーム(メディアリー)を登録してチャットセッションに参加します。各参加者の参加者の代表。参加者はお互いにメッセージを送信し、ルートをチャットルームに処理します。
ここのチャットルームオブジェクトは、仲介者の役割を果たし、他のオブジェクトを調整し、合理的に整理し、カップリングを減らします。
2。ソースコードケースリファレンス
MVC 3層モデルソリッドモデル(モデル)、表示層(ビュー)、およびコントロール層(コントロール/メディエーター)に非常に精通している必要があります。
制御層は、プレゼンテーションレイヤーとモデル層の間の仲介者です。一般的に言えば、MVCはフレームワーク設計における仲介モデルのアプリケーションでもあります。
3。ケースの紹介
コードコピーは次のとおりです。
function player(name){
this.points = 0;
this.name = name;
}
player.prototype.play = function(){
this.points += 1;
mediator.played();
};
varスコアボード= {
要素:document.getElementById( 'results')、
更新:function(score){
var i、msg = '';
(私はスコア){
if(score.hasownproperty(i)){
msg + = '<p> <strong>' + i + '<// strong>:';
msg += score [i];
msg += '<// p>';
}
}
this.element.innerhtml = msg;
}
};
var mediator = {
プレイヤー:{}、
セットアップ:function(){
var players = this.players;
player.home = new Player( 'home');
player.guest = new Player( 'Guest');
}、
再生:function(){
var players = this.players、
スコア= {
ホーム:players.home.points、
ゲスト:players.guest.points
};
scoreboard.update(score);
}、
キープレス:function(e){
e = e || window.event;
if(e。which === 49){
mediator.players.home.play();
戻る;
}
if(e .which === 48){
mediator.players.guest.play();
戻る;
}
}
};
mediator.setup();
window.onkeypress = mediator.keypress;
setimeout(function(){
window.onkeypress = null;
console.log( 'ゲームオーバー!');
}、30000);
4つ、要約しましょう
なぜ調停者?
オブジェクト間には多くの相互作用があります。各オブジェクトの動作操作は、1つのオブジェクトの動作を変更するために互いに依存し、同時に他の多くのオブジェクトの動作を変更することを伴います。
メディエーターモードを使用すると、各オブジェクト間のカップリングを緩めることができます。メディエーターとの関係を気にし、多くの人と多くの関係を1対多くの関係に変えるだけです。
システムの複雑さを減らし、変更可能なスケーラビリティを改善できます。
中間モデルを使用した機会
1.複雑な通信が必要な明確に定義されたオブジェクトのセット。
2。サブクラスをあまりにも多く生成することなく、複数のクラスで配布された動作をカスタマイズします。
調停オブジェクトは主に動作をカプセル化するために使用され、動作の参加者はそれらのオブジェクトであることがわかりますが、メディエーターを介して、これらのオブジェクトはお互いを知る必要はありません。 (Dimitの法律の具体的な実装)
仲介モデルを使用することの利点:
1.システムオブジェクト間の結合を減らし、オブジェクトを独立して簡単に再利用できるようにします。
2。システムの柔軟性を向上させ、システムの拡張と保守を簡単にします。
メディエーターパターンの使用の欠点:
この「仲介者」はより多くの責任を想定するため、仲介モデルの欠点は明らかです。