1. Общее резюме
1. Автор кратко говорит об этом
Давайте приведем простой пример из нашей повседневной жизни. Когда мы идем в агентство по недвижимости, чтобы арендовать дом, агентство по недвижимости образует посредника между арендатором и арендодателем. Арендатор не заботится о том, кого он арендует. Арендодателю не заботится о том, кому он арендует. Эта транзакция стала настолько удобной из -за существования посредника.
В процессе разработки программного обеспечения неизбежно будет ситуация, когда несколько классов или подсистем взаимодействуют друг с другом, а взаимодействие очень сложное, в результате чего каждый класс должен знать, с которыми он должен взаимодействовать, чтобы их соединение казалось чрезвычайно мощным. На все тело влияет один шаг, и последствия очень серьезны, и большой медведь очень зол! ~~~~ (> _ <) ~~~~
Хорошо, с тех пор, как вопрос был поднят, пригласите нашего главного героя в этом выпуске - посредничная модель.
Функция посредника состоит в том, чтобы инкапсулировать взаимодействие между объектами. Если операции объекта приведут к изменениям в других связанных объектах, и этот объект не хочет справляться с этими отношениями само по себе, вы можете найти посредника и позволить ему справиться с этими проблемными отношениями. См. Следующий небольшой пример:
Кода -копия выглядит следующим образом:
var участник = function (name) {
this.name = name;
this.chatroom = null;
};
Участник.prototype = {
отправить: function (сообщение, to) {
this.chatroom.send (сообщение, это, к);
},
Получить: function (сообщение, от) {
log.add (from.name + "to" + this.name + ":" + message);
}
};
var Chatroom = function () {
var участники = {};
возвращаться {
Регистрация: function (участник) {
участники [участник. name] = участник;
Участник.chatroom = это;
},
отправить: function (сообщение, от, до) {
if (to) {
to.receive (сообщение, от);
} еще {
для (ключ в участниках) {
if (участники [Key]! == от) {
участники [Key] .receive (сообщение, от);
}
}
}
}
};
};
var log = (function () {
var log = "";
возвращаться {
добавить: function (msg) {log + = msg + "/n"; },
show: function () {alert (log); log = ""; }
}
}) ();
функция run () {
var yoko = новый участник ("yoko");
var John = новый участник ("Джон");
var paul = новый участник ("Paul");
var Ringo = новый участник ("Ringo");
var Chatroom = новый чат ();
чат. Регистрация (yoko);
чат. Регистрация (Джон);
чат. Регистрация (Пол);
чат. Регистрация (Ринго);
yoko.send («Все, что вам нужно, это любовь»);
yoko.send («Я люблю тебя, Джон»);
John.send («Эй, не нужно транслировать», Йоко);
Paul.send ("ха, я слышу это!");
Ringo.send («Пол, что ты думаешь?», Пол);
log.show ();
}
В примере кода у нас четыре участника, присоединяйтесь к сеансу чата, зарегистрировав чат (Mediary). Представитель участников для каждого участника. Участники отправляют сообщения друг другу и обрабатывают маршруты в чаты.
Объекты чата здесь играют роль посредника, координируют другие объекты, разумно организуют их и уменьшают связь.
2. Ссылка на корпус исходного кода
Мы должны быть очень хорошо знакомы с трехслойной моделью модели MVC с твердой моделью (модель), просмотром презентационного слоя (представление) и контрольным слоем (управление/медиатор).
Контрольный слой является посредником между презентационным уровнем и уровнем модели. Вообще говоря, MVC также является применением промежуточной модели в проектировании фреймворта.
3. Дело введение
Кода -копия выглядит следующим образом:
Функциональный игрок (имя) {
this.points = 0;
this.name = name;
}
Player.prototype.play = function () {
this.points += 1;
mediator.played ();
};
var bassboard = {
Элемент: Document.GetElementById ('Результаты'),
Обновление: функция (оценка) {
var i, msg = '';
для (я в счете) {
if (score.hashownproperty (i)) {
msg + = '<p> <strong>' + i + '<// strong>:';
msg += оценка [i];
msg += '<// p>';
}
}
this.element.innerhtml = msg;
}
};
var mediator = {
Игроки: {},
настройка: function () {
var players = this.players;
игроки. Home = новый игрок ('Home');
Players.guest = новый игрок ('гость');
},
Играл: function () {
var players = this.players,
Оценка = {
Главная: Игроки. Home.points,
Гость: игроки. Guest.points
};
табло.
},
keypress: 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;
settimeout (function () {
window.onkeypress = null;
console.log ('over!');
}, 30000);
Четыре, давайте обобфрим
Почему посредник?
Есть много взаимодействий между объектами. Поведенческие операции каждого объекта зависят друг от друга, чтобы изменить поведение одного объекта, и в то же время это включает изменение поведения многих других объектов.
Если вы используете режим медиатора, связь между каждым объектом может быть ослаблена. Вам нужно только заботиться о отношениях с посредником и превратить отношения ко многим ко многим в отношения с одним ко многим.
Это может уменьшить сложность системы и улучшить модифицируемую масштабируемость.
Случаи с использованием промежуточной модели
1. Черенного набора объектов, которые теперь требуют сложной связи.
2. Настройте поведение, распределяемое в нескольких классах, не желая генерировать слишком много подклассов.
Можно видеть, что объекты посредничества в основном используются для инкапсуляции поведения, и участниками поведения являются эти объекты, но через посредник эти объекты не должны знать друг друга. (Конкретное реализация закона Димита)
Преимущества использования промежуточной модели:
1. Снижает связь между системными объектами, что делает объекты легко использоваться независимо.
2. Улучшите гибкость системы и сделайте систему простым в расширении и обслуживании.
Недостатки использования шаблона посредника:
Недостатки промежуточной модели очевидны, потому что этот «посредник» несет больше обязанностей, поэтому, как только возникнет проблема с посредникам, вся система будет сильно затронута.