1. Ringkasan keseluruhan
1. Penulis secara singkat membicarakannya
Mari kita berikan contoh sederhana dari kehidupan kita sehari -hari. Ketika kami pergi ke agen real estat untuk menyewa rumah, agen real estat membentuk perantara antara penyewa dan lessor pemilik. Penyewa tidak peduli dengan siapa yang disewanya. Lessor tuan tanah tidak peduli dengan siapa ia menyewakan. Transaksi ini menjadi sangat nyaman karena keberadaan perantara.
Selama proses pengembangan perangkat lunak, pasti akan ada situasi di mana beberapa kelas atau subsistem berinteraksi satu sama lain, dan interaksi sangat rumit, menghasilkan setiap kelas harus mengetahui kelas yang perlu berinteraksi dengan, sehingga kopling mereka akan tampak sangat kuat. Seluruh tubuh dipengaruhi oleh satu gerakan, dan konsekuensinya sangat serius, dan beruang besar sangat marah! ~~~~ (> _ <) ~~~~
Oke, karena pertanyaannya telah diajukan, harap undang protagonis kami dalam masalah ini - model perantara muncul.
Fungsi perantara adalah merangkum interaksi antara objek. Jika operasi objek akan menyebabkan perubahan pada objek terkait lainnya, dan objek ini tidak ingin menangani hubungan ini dengan sendirinya, maka Anda dapat menemukan perantara dan membiarkannya menangani hubungan yang merepotkan ini. Lihat contoh kecil berikut:
Salinan kode adalah sebagai berikut:
var peserta = function (name) {
this.name = name;
this.chatroom = null;
};
Peserta.prototype = {
kirim: function (pesan, ke) {
this.chatroom.send (pesan, ini, ke);
},
terima: fungsi (pesan, dari) {
log.add (from.name + "to" + this.name + ":" + pesan);
}
};
var chatroom = function () {
var peserta = {};
kembali {
register: function (peserta) {
peserta [peserta.name] = peserta;
peserta.chatroom = ini;
},
Kirim: function (pesan, dari, ke) {
if (to) {
to.receive (pesan, dari);
} kalau tidak {
untuk (kunci dalam peserta) {
if (peserta [kunci]! == from) {
peserta [kunci] .receive (pesan, dari);
}
}
}
}
};
};
var log = (function () {
var log = "";
kembali {
tambahkan: function (msg) {log + = msg + "/n"; },
show: function () {waspada (log); log = ""; }
}
}) ();
fungsi run () {
var yoko = peserta baru ("yoko");
var John = peserta baru ("John");
var Paul = peserta baru ("Paul");
var ringo = peserta baru ("ringo");
var chatroom = chatroom baru ();
chatroom.register (yoko);
chatroom.register (John);
chatroom.register (Paul);
chatroom.register (ringo);
yoko.send ("Yang Anda butuhkan hanyalah cinta.");
yoko.send ("Aku mencintaimu John.");
John.Send ("Hei, tidak perlu disiarkan", yoko);
Paul.Send ("Ha, saya mendengar itu!");
ringo.send ("Paul, bagaimana menurutmu?", Paul);
log.show ();
}
Dalam kode sampel kami memiliki empat peserta, bergabunglah dengan sesi obrolan dengan mendaftarkan ruang obrolan (mediary). Perwakilan peserta untuk setiap peserta. Peserta mengirim pesan satu sama lain dan memproses rute ke ruang obrolan.
Objek ruang obrolan di sini memainkan peran perantara, mengoordinasikan objek lain, mengaturnya secara wajar, dan mengurangi kopling.
2. Referensi Kode Kode Sumber
Kita harus sangat terbiasa dengan model solid model tiga lapis MVC (model), tampilan lapisan presentasi (tampilan) dan lapisan kontrol (kontrol/mediator).
Lapisan kontrol adalah perantara antara lapisan presentasi dan lapisan model. Secara umum, MVC juga merupakan aplikasi model perantara dalam desain kerangka kerja.
3. PENDAHULUAN KASUS
Salinan kode adalah sebagai berikut:
function player (name) {
this.points = 0;
this.name = name;
}
Player.prototype.play = function () {
this.points += 1;
mediator.played ();
};
var skor papan = {
Elemen: document.geteLementById ('hasil'),
UPDATE: function (skor) {
var i, msg = '';
untuk (saya dalam skor) {
if (score.hasownproperty (i)) {
msg + = '<p> <strong>' + i + '<// strong>:';
msg += skor [i];
msg += '<// p>';
}
}
this.element.innerhtml = msg;
}
};
var mediator = {
Pemain: {},
setup: function () {
vaR player = this.players;
pemain.home = pemain baru ('home');
pemain.guest = pemain baru ('tamu');
},
bermain: function () {
var player = this.players,
skor = {
Beranda: pemain.home.points,
Tamu: pemain.guest.points
};
SCOREBOARD.UPDATE (SCORE);
},
Keypress: function (e) {
E = E || window.event;
if (e.WHich === 49) {
mediator.players.home.play ();
kembali;
}
if (e.WHich === 48) {
mediator.players.guest.play ();
kembali;
}
}
};
mediator.setup ();
window.onkeypress = mediator.keypress;
setTimeout (function () {
window.onkeypress = null;
Console.log ('Game Over!');
}, 30000);
Empat, mari kita ringkas
Mengapa Mediator?
Ada banyak interaksi antar objek. Operasi perilaku masing -masing objek bergantung satu sama lain untuk memodifikasi perilaku satu objek, dan pada saat yang sama melibatkan memodifikasi perilaku banyak objek lainnya.
Jika Anda menggunakan mode mediator, kopling antara setiap objek dapat dilonggarkan. Anda hanya perlu peduli dengan hubungan dengan mediator, dan mengubah hubungan banyak-ke-banyak menjadi hubungan satu-ke-banyak.
Ini dapat mengurangi kompleksitas sistem dan meningkatkan skalabilitas yang dapat dimodifikasi.
Kesempatan menggunakan model perantara
1. Satu set objek yang terdefinisi dengan baik yang sekarang membutuhkan komunikasi yang kompleks.
2. Kustomisasi perilaku yang didistribusikan di beberapa kelas tanpa ingin menghasilkan terlalu banyak subclass.
Dapat dilihat bahwa objek mediasi terutama digunakan untuk merangkum perilaku, dan para peserta dalam perilaku adalah objek -objek tersebut, tetapi melalui mediator, objek -objek ini tidak perlu saling mengenal. (Implementasi khusus Hukum Dimit)
Keuntungan menggunakan model perantara:
1. Mengurangi kopling antara objek sistem, membuat objek mudah digunakan kembali secara mandiri.
2. Tingkatkan fleksibilitas sistem dan buat sistem mudah untuk berkembang dan pertahankan.
Kerugian menggunakan pola mediator:
Kerugian dari model perantara sudah jelas, karena "perantara" ini memikul lebih banyak tanggung jawab, jadi begitu ada masalah dengan objek perantara, seluruh sistem akan sangat terpengaruh.