представлять
Mediator Mode (Mediator) использует объект медиатора для инкапсуляции серии объектных взаимодействий. Посредник делает объекты, которые не должны быть явно ссылаются друг на друга, тем самым свободно связывают их и могут независимо изменить их взаимодействие.
Основной контент поступает: http://www.addyosmani.com/resources/essentialjsdesignpatterns/book/#mediatorpatternjavascript
текст
В разработке программного обеспечения посредники являются шаблоном поведенческого проектирования, которая позволяет различным частям системы общаться, предоставляя унифицированный интерфейс. Как правило, если система имеет много подмодулей, которые необходимо напрямую передаваться, для каждого модуля должна быть создана центральная управляющая точка для взаимодействия через центральную управляющую точку. Промежуточная модель позволяет этим подмодулям достигать цели развязки без прямой связи.
Например, общая система управления движением аэропорта, башня является посредником, которая контролирует взлет и посадку самолета (подмодуль), потому что вся связь завершается от отчетности самолета в башню, а не общение друг с другом перед самолетом. Центральная система управления является ключом к системе, то есть роль посредника в проектировании программного обеспечения.
Давайте сначала поймем это с помощью псевдокода:
Кода -копия выглядит следующим образом:
// Следующий код-псевдо-код, пожалуйста, не обращайте слишком много внимания коду
// Здесь пространство имен приложений эквивалентно игре роли посредника
var app = app || {};
// выполнять запросы AJAX через посредник приложений
app.sendrequest = function (options) {
return $ .ajax ($. extend ({}, options);
}
// После запроса URL -адреса отобразите представление
app.populateview = function (url, view) {
$.
.then (function () {
// показать контент
});
}
// Очистить контент
app.resetView = function (view) {
view.html ('');
}
В JavaScript посредники очень распространены, эквивалентны автобусу сообщения в схеме наблюдателя. Тем не менее, они не реализуются путем вызова Pub/Sub, подобного наблюдателям, но объединяются посредниками. Давайте приведем пример на основе наблюдателя:
Кода -копия выглядит следующим образом:
var mediator = (function () {
// подписаться на событие и предоставить функцию обратного вызова после запуска события
var indifbibe = function (канал, fn) {
if (! Mediator.Channels [Channel]) mediator.channels [Channel] = [];
mediator.channels [Channel] .push ({context: this, обратный вызов: fn});
вернуть это;
},
// трансляции событий
publish = function (канал) {
if (! mediator.channels [Channel]) вернуть false;
var args = array.prototype.slice.call (аргументы, 1);
for (var i = 0, l = mediator.channels [канал] .length; i <l; i ++) {
var foodsppring = mediator.channels [канал] [i];
antippring.callback.apply (antippring.context, args);
}
вернуть это;
};
возвращаться {
каналы: {},
Публикуйте: Publish,
Подписаться: подписаться,
installto: function (obj) {
obj.subscribe = подписаться;
obj.publish = publish;
}
};
} ());
Вызов кода относительно прост:
Кода -копия выглядит следующим образом:
(function (mediator) {
функция инициализировать () {
// значение по умолчанию
mediator.name = "dudu";
// подписаться на событие имен
// функция обратного вызова отображает информацию до и после изменения
mediator.subscribe ('namechange', function (arg) {
console.log (this.name);
this.name = arg;
console.log (this.name);
});
}
function updateName () {
// Событие трансляции триггера, параметр - это новые данные
Mediator.publish ('NameCange', 'Tom'); // Дуду, Том
}
инициализировать (); // инициализировать
UpdateName (); // Вызов
}) (посредник);
Посредники и наблюдатели
На данный момент каждый может быть запутан. Посредник и наблюдатель кажутся похожими. В чем разница? На самом деле это немного похоже, но давайте посмотрим на конкретное описание:
Образец наблюдателя, единственный объект, который не инкапсуляет ограничения. Напротив, наблюдатель над наблюдателями и конкретными предметами класса работают вместе, чтобы сохранить ограничения. Коммуникация взаимодействует через нескольких наблюдателей и несколько бетонных классов: каждый бетонный класс обычно содержит несколько наблюдателей, а иногда один наблюдатель в бетонном классе также является бетонным классом другого наблюдателя.
Посредственная модель делает не просто распределение, но она играет роль поддержания этих ограничений.
Посредники и модели внешнего вида
Многие люди также могут быть смущены в разнице между посредниками и моделями внешнего вида. Они оба абстрагируют существующие модули, но есть некоторые тонкие различия.
Что делает посредник, это общение между модулями, которое является многонациональным, но режим внешнего вида просто определяет простой интерфейс для определенного модуля или системы без добавления дополнительной функциональности. Концепция других модулей в системе не имеет прямого соединения с режимом внешнего вида и может считаться односторонним.
Вот еще один полный пример:
Кода -копия выглядит следующим образом:
<! Doctype html>
<html lang = "en">
<голова>
<Title> шаблоны JavaScript </title>
<meta charset = "utf-8">
</head>
<тело>
<div id = "Результаты"> </div>
<Скрипт>
Функциональный игрок (имя) {
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) {// номерной номер "1"
mediator.players.home.play ();
возвращаться;
}
if (e.which === 48) {// номерные клавиши "0"
mediator.players.guest.play ();
возвращаться;
}
}
};
// идти!
mediator.setup ();
window.onkeypress = mediator.keypress;
// конец через 30 секунд
settimeout (function () {
window.onkeypress = null;
console.log ('over!');
}, 30000);
</script>
</body>
</html>
Суммировать
Режим посредника обычно используется в ситуациях, когда группа объектов была четко определена, но сложна. Вообще говоря, промежуточный режим прост в использовании в системе, но в системе также легко неправильно использовать. Когда в системе появляется сложная объектная группа взаимодействий с многими-многими, не спешите сначала использовать промежуточный режим, но подумайте о том, есть ли что-то не так с дизайном системы.
Кроме того, поскольку промежуточная модель превращает сложность взаимодействия в сложность самого посредника, посредник будет более сложным, чем любой другой объект.