JavaScript デザイン パターンの Mediator モード Mediator_javascript スキル

WBOY
リリース: 2016-05-16 16:23:16
オリジナル
870 人が閲覧しました

1. 全体の概要

1、著者は

について簡単に説明します

日常生活から簡単に例えてみましょう。私たちは家を借りるために住宅仲介業者に行きます。住宅仲介業者は賃貸人と家主の間の仲介を行います。賃貸人は誰の家を借りるかは気にしません。家主も誰に貸すかなど気にしません。仲介業者の存在により、この取引は非常に便利になりました。

ソフトウェア開発のプロセスでは、複数のクラスまたはサブシステムが相互に対話する状況に必ず遭遇しますが、その対話は非常に煩雑であり、その結果、各クラスは対話する必要があるクラスを認識する必要があります。彼らのカップリングは非常に強力であるように見えます。一つの動作が全身に影響を与えると、クマは非常に怒るでしょう。 ~~~~(>_

それでは、質問が提起されましたので、今回の主人公である仲介モードを紹介しましょう

メディエーターの機能は、オブジェクト間の対話をカプセル化することです。オブジェクトの操作によって他の関連オブジェクトが変更され、そのオブジェクトがこれらの関係を単独で処理したくない場合は、仲介者を見つけて、そのオブジェクトにこれらの面倒な関係を処理させることができます。以下の小さな例を見てください:

コードをコピー コードは次のとおりです:

var Participant = 関数(名前) {
    this.name = 名前;
    this.chatroom = null;
};
Participant.prototype = {
    send: function(message, to) {
        this.chatroom.send(メッセージ、これ、宛先);
    }、
    受信: function(message, from) {
        log.add(from.name " to " this.name ": " message);
    }
};
var チャットルーム = function() {
    var参加者 = {};
    戻り値 {
        register: 関数(参加者) {
            参加者[参加者.名前] = 参加者;
            参加者.チャットルーム = これ;
        }、
        send: function(message, from, to) {
            if (へ) {
                to.receive(メッセージ、送信者);   
            } else {
                for (参加者をキー入力) {
                    if (参加者[キー] !== from) {
                        参加者[キー].receive(メッセージ、送信者);
                    }
                }
            }
        }
    };
};
var log = (function() {
    var log = "";
    戻り値 {
        追加: function(msg) { log = msg "n"; }、
        表示: function() { アラート(ログ);ログ = ""; }
    }
})();
関数 run() {
    var yoko = 新しい参加者("Yoko");
    var john = 新しい参加者("ジョン");
    var paul = 新しい参加者("ポール");
    var apple = 新しい参加者("リンゴ");
    var chatroom = new Chatroom();
    chatroom.register(yoko);
    chatroom.register(ジョン);
    chatroom.register(ポール);
    chatroom.register(リンゴ);
    yoko.send("必要なのは愛だけです。");
    yoko.send("ジョン、愛しています。");
    john.send(「ブロードキャストする必要はないよ」、ヨーコ);
    paul.send("はは、それは聞いた!");
    ringo.send(「ポール、どう思う?」、ポール);
    log.show();
}

例のコードには 4 人の参加者がおり、各参加者は、オブジェクトの代表者を介してメッセージを送信し、参加者は処理を行います。 >

ここの温度室オブジェクトは中間的な作用を引き起こし、他のオブジェクトを調整し、適切なグループを実行し、結合を低下させます。

二、ソースコード案例参照

私たちは、この非常に精通した MVC 3 層モデルの本体モデル (Model)、表示層 (View)、さらに制御層 (Control/Mediator) を開発しています。

コントロール層は、表示層とモデル層の間に位置する中間メディアです。MVC は、フレーム設計内の中間メディア モードの 1 つでもあります。

三、案例導入

复制代码代码如下:

関数 Player(名前) {
    this.points = 0;
    this.name = 名前;
}
Player.prototype.play = function () {
    this.points = 1;
    mediator.played();
};
var スコアボード = {
    要素:document.getElementById('results'),
    update:関数 (スコア) {
        var i, msg = '';
        for (スコア内の i) {
            if (score.hasOwnProperty(i)) {
                msg = '

' 私 ': ';
                msg = スコア[i];
                msg = '

';
            }
        }
        this.element.innerHTML = msg;
    }
};
var mediator = {
    プレイヤー:{}、
    setup:function () {
        var player = this.players;
        player.home = new Player('ホーム');
        player.guest = new Player('ゲスト');
    }、
    再生:関数 () {
        var player = this.players,
                スコア = {
                    ホーム:players.home.points、
                    ゲスト:players.guest.points
                };
        スコアボード.update(スコア);
    }、
    キープレス:関数 (e) {
        e = e ||ウィンドウ.イベント;
        if (e.that === 49) {
            mediator.players.home.play();
            戻る;
        }
        if (e.that === 48) {
            mediator.players.guest.play();
            戻る;
        }
    }
};
mediator.setup();
window.onkeypress = mediator.keypress;
setTimeout(function() {
    window.onkeypress = null;
    console.log('ゲームオーバー!');
}, 30000);

四、总结一下

なぜメディエーターなのか?

それぞれのオブジェクト間の対話操作が非常に多く、各オブジェクトの実行は操作に依存しており、1 つのオブジェクトの変更の実行は、同時に複数の他のオブジェクトの変更に関係しています。

Mediator モードを使用する場合、各オブジェクト間の結合を分散させることができ、必要なのは心と Mediator の関係だけであり、複数の関係を単一の関係にすることができます。

システムの複雑性を軽減し、修正可能な拡張性を高めます。

中介者モードの組み合わせ

1. 一連の良好なオブジェクトが、反復的な通信を実行します。

2. 複数のクラスの中で 1 つの分布を定義し、あまりにも多くの子クラスを生成しないようにします。

見てわかるように、中間媒介オブジェクトは主に実行を包含するために使用され、実行の関係者はこれらのオブジェクトですが、中間媒介を介してこれらのオブジェクトは相互に認識されません。

ミドルメディアモードを使用する利点:

1. システムオブジェクト間の結合性を低下させ、オブジェクトを独立して使用しやすくします。

2. 系の活性を高め、系を拡張しやすくします。

中介者モードを使用するポイント:

中間介在モードの欠点は明らかであり、この「中間介在」は非常に多くの役割を担っているため、この中間介在者に問題が発生すると、システム全体が重大な影響を受ける可能性があります。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
最新の問題
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート