Вы бы использовали его, когда у вас есть несколько частей, которые будут работать вместе в неограниченных комбинациях, когда вы не знаете всех комбинаций заранее или когда более эффективно принимать все комбинации.
Допустим, вы былисоздавая приложение для социальных сетей, вы написали класс для инкапсуляции списка пользователей.На некоторых экранах при нажатии на пользователя в списке открывается его профиль, на другом экране, возможно, при щелчке пользователя выполняется поиск каждого оставленного комментария, а на третьем экране происходит что-то еще.
Если вы должны были написать это не с использованием mediator / pubsub, в результате вы получите кучу операторов if в событии onclick ...
UserList.prototype.onUserClick = function(user) {
// Check if we're supposed to open a popup
if (this.mode === 'profile')
// Check for something else
else if (this.mode === 'something else')
// Check for another case
else if (this.mode === 'foo')
}
Посредник - это решение этой проблемы, потому чтоне требует, чтобы UserList знал каждую ситуацию, в которой он может оказаться. Вместо этого приведенный выше код в UserList может быть просто уточнен для трансляции, когда пользователь нажимает на ...
UserList.prototype.onUserClick = function(user) {
this.publish('user-click', user);
}
Затемкаждый из ваших других экранов или элементов пользовательского интерфейса может просто прослушивать сообщение о щелчке пользователя ...
// On pages where there needs to be a popup profile
Mediator.onMessage('user-click', function(data) {
showProfilePopup(data);
});
// Or perhaps on a search page
SearchBox.onMessage('user-click', function(data) {
this.searchByUser(data);
});
Кроме того, посредник начинает сиять, потому что эти другие компоненты пользовательского интерфейса, такие как SearchBox
, не заинтересованыв частности, когда UserList
запускает щелчок пользователя, их интересует только когда публикуется щелчок пользователя, другие элементы управления пользовательским интерфейсом на странице cщелчок огня пользователем, и эти части могут реагировать на него.
Что касается примечания, className = { }
не создает класс.То, что вы, вероятно, хотите, это className = function() { }
.