Показать сообщение отдельно
  #1 (permalink)  
Старый 12.08.2010, 14:41
Кандидат Javascript-наук
Отправить личное сообщение для jetli13 Посмотреть профиль Найти все сообщения от jetli13
 
Регистрация: 25.11.2009
Сообщений: 109

паттерн наблюдатель
Хотелось бы выслушать объективную критику по поводу реализации паттерна "наблюдатель"
выставляю основной класс.

тудухи в комментах можно считать вопросами.
спасибо!

/**
* класс "наблюдатель" реализующий работу с кастомными событиями
* @todo подумать над названием класса
* @todo решить проблему с пространством имен Н: событие switchTab может быть у разных объектов
*/
function observer()
{
  this.events = new Array();
  
  /**
  * добавляет наблюдателя
  * @param {string} objName имя объекта наблюдателя
  * @param {string} eventName событие которое отслеживаем
  */
  this.addObserver = function(objName, eventName)
  {
    if (!this.events[eventName])
    {
      this.events[eventName] = new Array();
    }
    
    this.events[eventName].push(objName)
  }
  
  /**
  * оповещает всех наблюдателей о произошедшем событии
  * @param {string} eventName название события
  */
  this.fireEvent = function(eventName)
  {
    var f = eventName.charAt(0).toUpperCase();
    var eventNameUpperFirst = f + eventName.substr(1, eventName.length-1);
    
    for(var i = 0; i < this.events[eventName].length; i++)
    {
      window[this.events[eventName][i]]['on' + eventNameUpperFirst]();
    }
  }
  
  /**
  * удаляет наблюдателя
  * @param {string} objName имя объекта наблюдателя
  * @param {string} eventType событие которое отслеживаем
  */
  this.removeObserver = function(objName, eventType)
  {
    for(var i = 0; i < this.events[eventName].length; i++)
    {
      if (this.events[eventName][i] == objName)
      {
        this.events[eventName][i] = null;
      }
    }
  }
}

var observer = new observer();
Ответить с цитированием