![]() |
|
Модераторы: LSD, AntonSaburov |
![]()
|
|
| 604 |
|
||||
|
Unregistered |
Как лучше реализовывать интерфейс обраб. событий? В классе который содержит компоненты на которые вешаются события или в отдельном?
я вижу 2 варианта: Тут мы не содаем доп. классов но если много слушателей тогда приходится строить кучу условий.
Тут мы избавились от условий но получаем много анонимных классов (Возможно загрузка класса более ресурсоёмкая задача?)
Собственно теперь вопрос! Как делать правильно, и какой из вариантов лучше? Или нужно совсем иначе? |
||||
|
|||||
| batigoal |
|
||||
![]() Нелетучий Мыш ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 6423 Регистрация: 28.12.2004 Где: Санктъ-Петербургъ Репутация: 24 Всего: 151 |
Попробовал провести тест.
Результаты почти идентичны: Однократное нажатие каждой кнопки: 6940 против 6860. Потом попробовал эмулировать трехкратное нажатие (как в коде): 20900 против 20590. Можно было бы оптимизировать поиск в массиве, но не стал - ведь в общем случае у тебя не массив, а именно перебор. Это сообщение отредактировал(а) Lamer George - 15.4.2005, 15:37 -------------------- "Чтобы правильно задать вопрос, нужно знать большую часть ответа" (Р. Шекли) ЖоржЖЖ |
||||
|
|||||
| AntonSaburov |
|
|||
![]() Штурман ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 5658 Регистрация: 2.7.2002 Где: Санкт-Петербург Репутация: 51 Всего: 118 |
IMHO надо делать так, чтобы было удобно читать, править и расширять. Общие принципы обычно имеют критерии как и для обычного ООП.
|
|||
|
||||
| Domestic Cat |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 5452 Регистрация: 3.5.2004 Где: Dallas, US Репутация: 50 Всего: 172 |
Есть еще Command паттерн, правда придется сабклассить каждый баттон. Можно листенером сделать не сам класс с гуем, а отдельный делегат.
-------------------- |
|||
|
||||
| NotGonnaGetUs |
|
||||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 92 Регистрация: 25.2.2005 Где: Москва Репутация: 4 Всего: 12 |
Если речь идёт за тот "Комманд паттерн", который описан в http://forum.vingrad.ru/index.php?showtopic=41784&st=30, то лучше забыть о нём. Хотя бы потому, что листенер на бутон всё равно вешается, и этот листенер есть сам бутон. "Нормальный" комманд паттерн предполагает, что у нас есть набор однотипных заданий (комманд, классов с общим интерфейсом) и исполнитель этих задний. На практике всё можно изуродывать под конретную задачу. Возмём тот же ГУИ с кнопочками. При инициализации панели создаём класс контроллер. Каждому активному объекту вешаем листенер, который делегирует событие контроллеру.
Следующий шаг это вручение каждому активного компоненту уникального ID и составление таблицы "ID - Комманда1, Комманда2...", что бы изменение логики можно было производить правкой файла пропертисов или xml, не меняя код инициализации. Можно строить один большой контроллер, можно строить иерархию контроллеров по типу того, как сделано в маверике. Короче говоря простор для творчества большой з.ы. сорри, пример на ходу придумывал Это сообщение отредактировал(а) NotGonnaGetUs - 19.4.2005, 10:30 |
||||
|
|||||
| batigoal |
|
|||
![]() Нелетучий Мыш ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 6423 Регистрация: 28.12.2004 Где: Санктъ-Петербургъ Репутация: 24 Всего: 151 |
А надо ли оно нам? Интерфейс приложениия меняется не так уж часто... Имхо, не стоит усложнять код. -------------------- "Чтобы правильно задать вопрос, нужно знать большую часть ответа" (Р. Шекли) ЖоржЖЖ |
|||
|
||||
| NotGonnaGetUs |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 92 Регистрация: 25.2.2005 Где: Москва Репутация: 4 Всего: 12 |
Вам наверное не надо
|
|||
|
||||
| Domestic Cat |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 5452 Регистрация: 3.5.2004 Где: Dallas, US Репутация: 50 Всего: 172 |
Ты извини, это не код... При пятом нажатии на кнопку будет выполнено 5 раз SendMailTo.execute и 5 раз Command.execute. У анонимных классов доступа к локальным переменным в коде нет . И т п. -------------------- |
|||
|
||||
| NotGonnaGetUs |
|
||||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 92 Регистрация: 25.2.2005 Где: Москва Репутация: 4 Всего: 12 |
Есть такое, my bad. Поправил. Как вариант можно описать требования к ГУИ и реализовать его выше описанными способами. Будет наглядно и полезно |
||||
|
|||||
| Гость_604 |
|
|||
|
Unregistered |
Всем спасибо! Насколько я понял, ничего плохого в моем коде нет, так что оставлю все как есть.
|
|||
|
||||
| Zandr |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 433 Регистрация: 16.7.2004 Где: Новосибирск Репутация: 9 Всего: 13 |
В каком смысле? Пример хочу |
|||
|
||||
| batigoal |
|
|||
![]() Нелетучий Мыш ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 6423 Регистрация: 28.12.2004 Где: Санктъ-Петербургъ Репутация: 24 Всего: 151 |
Вроде есть... Добавлено @ 12:23 Если она final -------------------- "Чтобы правильно задать вопрос, нужно знать большую часть ответа" (Р. Шекли) ЖоржЖЖ |
|||
|
||||
| Zandr |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 433 Регистрация: 16.7.2004 Где: Новосибирск Репутация: 9 Всего: 13 |
||||
|
||||
![]()
|
| Правила форума "Java" | |
|
|
Если Вам помогли, и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, LSD, AntonSaburov, powerOn, tux, javastic. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | Java: Общие вопросы | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |