Форум Flasher.ru
Ближайшие курсы в Школе RealTime
Список интенсивных курсов: [см.]  
  
Специальные предложения: [см.]  
  
 
Блоги Правила Справка Пользователи Календарь Сообщения за день
 

Вернуться   Форум Flasher.ru > Flash > ActionScript 3.0

Версия для печати  Отправить по электронной почте    « Предыдущая тема | Следующая тема »  
Опции темы Опции просмотра
 
Создать новую тему Ответ
Старый 12.02.2012, 02:16
in4core вне форума Посмотреть профиль Отправить личное сообщение для in4core Найти все сообщения от in4core
  № 1  
Ответить с цитированием
in4core
 
Аватар для in4core

Регистрация: Mar 2009
Сообщений: 4,219
Записей в блоге: 14
По умолчанию запуск событий одного класса во множестве

Не знаю как правильно назвать тему, извиняйте.

Давно мучает такой вопрос, есть у нас класс управляющий сервером, тоесть класс приемник данных от сервера и соотв диспатчит события при приходе определенных данных. Задача - подписываться на события из разных классов.
Самый простой вариант делаем класс статическим, создавая внутри диспатчер, и теперь из любой точки можно подписаться как
Код AS3:
StaticClass.addEventListener(...)
( естевенно addEventListener кастомный метод ). Так например на часть событий я могу подписаться в одном классе, а на часть в другом, или даже выписывать одни и теже события в разных классах выполняя различные методы.
Вариант два, так же статик, но передавать туда диспатчер типа
Код AS3:
StaticClass.dispatcher = internalDispacther;
internalDispatcher.addEventListener...
А в каждом новом классе internalDispatcher = StaticClass.dispatcher;
Этот самый вариант 2, видимо самый и убогий.
Но вариант 1, тоже не блещет, где то говорилось и обсуждалось , что статик в этом случае не есть тру.
Так вот интересно ваше мнение,
1. имеет право на жизнь статик в данном контексте ?
2. если не статик, то как ?
Архитектруа
Код AS3:
ServerClass
....
function onGetData(data) {  ???.dispatchEvent(...) }
//
SomeOtherClass
...
???.addEventListener(ServerClassEvents.SOME_EVENT... )
...
SomeOtherOtherClass и т.д.
 
???.addEventListener(ServerClassEvents.SOME_EVENT... )
__________________
Марк Tween

Старый 12.02.2012, 02:28
Цветкофф вне форума Посмотреть профиль Отправить личное сообщение для Цветкофф Найти все сообщения от Цветкофф
  № 2  
Ответить с цитированием
Цветкофф

Регистрация: May 2008
Адрес: москва
Сообщений: 63
написать класс, в котором будет единственная функция, она будет диспатчить события, а все остальные ваши классы наследуйте от написанного класса. Я бы так сделал, на мой взгляд данный вариант более логичен нежели вариант со статикой
ServerDispatcher.as
Код AS3:
package
{
	import flash.display.Sprite;
	import flash.events.Event;
 
	public class ServerDispatcher extends Sprite 
	{	
		public function dispatcherServerEvent() 
		{
			dispatchEvent(new Event(ServerClassEvents.SOME_EVENT));
		}		
	}
}
SomeOtherClass.as
Код AS3:
package
{
	import flash.events.Event;
 
	public class SomeOtherClass extends ServerDispatcher 
	{		
		public function SomeOtherClass() 
		{
			addEventListener(ServerClassEvents.SOME_EVENT,someFunction)
		}			
		private function someFunction(e:Event):void 
		{
 
		}
	}
}
SomeOtherOtherClass.as
Код AS3:
package
{
	import flash.events.Event;
 
	public class SomeOtherOtherClass extends ServerDispatcher 
	{		
		public function SomeOtherOtherClass() 
		{
			addEventListener(ServerClassEvents.SOME_EVENT, someSomeFunction)
		}			
		private function someSomeFunction(e:Event):void 
		{
 
		}
	}
}
примерно как то так)))


Последний раз редактировалось Цветкофф; 12.02.2012 в 02:41.
Старый 12.02.2012, 02:37
Wolsh вне форума Посмотреть профиль Отправить личное сообщение для Wolsh Найти все сообщения от Wolsh
  № 3  
Ответить с цитированием
Wolsh
Нуб нубам
 
Аватар для Wolsh

модератор форума
Регистрация: Jan 2006
Адрес: Бердск, НСО
Сообщений: 6,445
Обсервер?
__________________
Reality.getBounds(this);

Старый 12.02.2012, 03:02
Dukobpa3 вне форума Посмотреть профиль Отправить личное сообщение для Dukobpa3 Найти все сообщения от Dukobpa3
  № 4  
Ответить с цитированием
Dukobpa3
 
Аватар для Dukobpa3

блогер
Регистрация: Oct 2010
Адрес: Киев
Сообщений: 1,678
Записей в блоге: 12
Отправить сообщение для Dukobpa3 с помощью Skype™
Та даже если уж в сторону статика смотреть то лучше синглтон крутить.
А так да, обсервер имхо лучший вариант. Хотя от синглтона мало отличаться будет в данном контексте. Но обсервер можно будет сделать не только для сервера а и вообще для рассылки чего-попало кому-попало. Тоже некая гибкость, хотя и контроллить сложно.

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

Старый 12.02.2012, 03:42
in4core вне форума Посмотреть профиль Отправить личное сообщение для in4core Найти все сообщения от in4core
  № 5  
Ответить с цитированием
in4core
 
Аватар для in4core

Регистрация: Mar 2009
Сообщений: 4,219
Записей в блоге: 14
Цитата:
Обсервер?
Ой как ужастно выглядет , вариант со статиком имхо в 500 раз выгоднее и приятнее читается, чем создавать такую жуткую конструкцию, тем более
Код AS3:
ExchangeRate.getInstance().registerObserver(this);
уже статика вообщем то
__________________
Марк Tween

Старый 12.02.2012, 12:13
Wolsh вне форума Посмотреть профиль Отправить личное сообщение для Wolsh Найти все сообщения от Wolsh
  № 6  
Ответить с цитированием
Wolsh
Нуб нубам
 
Аватар для Wolsh

модератор форума
Регистрация: Jan 2006
Адрес: Бердск, НСО
Сообщений: 6,445
Ахах) Ну ужас весь от интерфейсов, которые необходимы только потому, что в классической схеме не используются события, а идет прямое оповещение (просто вызов интерфейсного метода у подписчиков).
Цитата:
уже статика вообщем то
Наоборот, классический синглтон. Могло выглядеть и как
Код AS3:
Server.notifier.addListener(this);
Еще раз – если использовать готовую систему оповещений через события, то вопрос сводится к "статик или синглтон". Обсервер это альтернативный третий вариант. Я просто внес разнообразие в твой выбор. Хотя и так видно, что ты уже выбрал статик и размышляешь только о том, прятать диспатчер за статическим фасадом или выставить его в общий доступ. Если спрячешь, то получишь неясность с target/currentTarget (EventDispatcher не делегируется на Класс, только на интерфейс, а у Классов не может быть интерфейса))). Если это не пугает, то почему бы и нет. Прятать хорошо. Прятать "сервер" – тем более)) По крайней мере никакой злодей не заставит твой диспатчер разослать ложные сообщения.
__________________
Reality.getBounds(this);

Старый 12.02.2012, 12:28
Psycho Tiger вне форума Посмотреть профиль Отправить личное сообщение для Psycho Tiger Найти все сообщения от Psycho Tiger
  № 7  
Ответить с цитированием
Psycho Tiger
 
Аватар для Psycho Tiger

блогер
Регистрация: Jun 2005
Адрес: Toronto
Сообщений: 6,599
Записей в блоге: 17
Что-то ничего не ясно. EventDispatcher и есть Observer.

Старый 12.02.2012, 13:29
Wolsh вне форума Посмотреть профиль Отправить личное сообщение для Wolsh Найти все сообщения от Wolsh
  № 8  
Ответить с цитированием
Wolsh
Нуб нубам
 
Аватар для Wolsh

модератор форума
Регистрация: Jan 2006
Адрес: Бердск, НСО
Сообщений: 6,445
Цитата:
EventDispatcher и есть Observer.
Ну не совсем. Обсервер предполагает наличие у подписчиков единого для всех метода, описанного в интерфейсе. Нотифаер тупо вызывает этот метод (при этом в базовой схеме никакого объекта вроде Event не отдается). Регистрируются не методы-обработчики, а сами экземпляры-подписчики. Их просто уведомляют, что нотифаер изменился, а они могут запросить данные по своим нуждам. EventDispatcher это конкретизированный обсервер, со своей специфической реализацией. То есть он – обсервер, но обсервер – не он.
__________________
Reality.getBounds(this);

Старый 12.02.2012, 14:33
Dukobpa3 вне форума Посмотреть профиль Отправить личное сообщение для Dukobpa3 Найти все сообщения от Dukobpa3
  № 9  
Ответить с цитированием
Dukobpa3
 
Аватар для Dukobpa3

блогер
Регистрация: Oct 2010
Адрес: Киев
Сообщений: 1,678
Записей в блоге: 12
Отправить сообщение для Dukobpa3 с помощью Skype™
Цитата:
Сообщение от Psycho Tiger
Что-то ничего не ясно. EventDispatcher и есть Observer.
Ты уже во второй или третьей теме отстаиваешь эту идею.
Или в блоге каком-то, не помню.

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

Старый 12.02.2012, 14:40
in4core вне форума Посмотреть профиль Отправить личное сообщение для in4core Найти все сообщения от in4core
  № 10  
Ответить с цитированием
in4core
 
Аватар для in4core

Регистрация: Mar 2009
Сообщений: 4,219
Записей в блоге: 14
Wolsh спасибо я тебя понял.
__________________
Марк Tween

Создать новую тему Ответ Часовой пояс GMT +4, время: 20:57.
Быстрый переход
  « Предыдущая тема | Следующая тема »  

Теги
single , static

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.


 


Часовой пояс GMT +4, время: 20:57.


Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.