используйте EventObject.getSource в Actionlistener
-
13-09-2019 - |
Вопрос
Я реорганизую некоторый код для назначения - в настоящее время представление имеет множество кнопок и меню и один прослушиватель действий, который решает, что делать, используя event.getSource().Судя по тому, что я читал, люди, похоже, считают, что лучше, чтобы каждый компонент графического интерфейса имел свой собственный прослушиватель действий, возможно, созданный с помощью какой-то фабрики.Однако, помимо небольшой очистки кода, какие еще преимущества это дает - не означает ли это, что в куче будет находиться гораздо больше объектов, что может повлиять на производительность?
Спасибо,
Али
Решение
Использование отдельных прослушивателей означает, что вам не нужно выполнять логические тесты, чтобы определить, что следует делать в вашем прослушивателе.Это имеет два преимущества
Во-первых, это заставляет код работать немного быстрее.
Во-вторых, это повышает удобство сопровождения и расширяемость вашего кода.Если вам нужно добавить новый компонент, вам не нужно изменять существующие методы.
Если вы попытаетесь использовать один прослушиватель (часто сам апплет или объект приложения) в качестве прослушивателя для нескольких компонентов, вы отмените базовую диспетчеризацию, которая является центральной для вызова методов, и реализуете диспетчеризацию вручную.Для этого необходимо использовать какой-то механизм переключения для различения различных компонентов, события которых вы обрабатываете.Система лучше подготовлена к этому, чем вы.Такая структура переключателей подвержена ошибкам, и ее сложно поддерживать по мере роста программы.Оставьте диспетчеризацию системе.
Источник: Шаблоны для событий Java
Другие советы
Это компромисс.Код с кучей if
на источнике считается некрасивым, а масса слушателей может засорять вашу память и отрицательно влиять на производительность.
Если у меня есть выбор, я обычно выбираю вариант, который сводит к минимуму объем кода, который мне приходится писать, поскольку меньше кода обычно означает меньше возможностей для ошибок.