Показать сообщение отдельно
Старый 01.11.2009, 20:36
wvxvw вне форума Посмотреть профиль Отправить личное сообщение для wvxvw Найти все сообщения от wvxvw
  № 14  
Ответить с цитированием
wvxvw
Modus ponens
 
Аватар для wvxvw

модератор форума
Регистрация: Jul 2006
Адрес: #1=(list #1#)
Сообщений: 8,049
Записей в блоге: 38
Цитата:
Сообщение от TommyLee Посмотреть сообщение
Некорректно выразился. Хотел сказать, что функционал подписка-оповещение вынесен в отдельный класс, вместо того, чтобы реализовать его в Event. Для меня это нелогично, но я не профессионал, поэтому хочется узнать причины такого шага, чтобы повысить свой уровень.
Ну вот представьте, у вас есть 2 экземпляра одного и того же класса, они оба диспатчат событие "change" но разница в том, что один из экземпляров его диспатчит 1 раз в минуту, а другой - 10 раз в секунду. А вы просто подписались на событие "change", теперь:
- 599 вызовов обработчика собыя будут "мимо".
- один лиший слушатель при перечислении всех слушателей, которое это событие должно оповестить.
- лишняя логика в обработчике событя по вычислению, а кто же его вызвал.

Но, опять же, с другой стороны никто не говорит, что события круче всего, а все остальное - плохо, если вам такой функционал не нужен, реализуйте сами что-нибудь поскромнее.

Вот такой например вариант "подписки" на изменеие ширины:
Код AS3:
public function set widthListeners(value:Vector.<Function>):void
{
	for each (var f:Function in value)
	{
		if (_widthListeners.indexOf(f) < 0)
			_widthListeners.push(f);
	}
}
 
public override function set width(value:Number):void
{
	for each (var f:Function in _widthListeners)
	{
		f(super.width, value);
	}
	super.width = value;
}
__________________
Hell is the possibility of sanity


Последний раз редактировалось wvxvw; 01.11.2009 в 20:38.