Лучшие практики ActionListener [закрыто]



Извините за название, возможно, слишком общий.

Я уже читаюКак написать слушателя действия учебник по Java и я уже читалэтот вопрос, но у меня все еще есть некоторые сомнения: мне было интересно, какое решение является лучшим, когда мне приходится выполнять одно и то же действие несколько раз.

хочу использовать то же самоеActionListener, но я не уверен, как добиться этого наилучшим образом (говоря о терминах: читаемость кода, удобство использования кода, производительность и стиль кода).

Первый "стандарт» код (который я бы использовал, если бы яя не собираюсь повторно использовать слушателя действия)

btnMenu.addActionListener(
    new ActionListener() {
        public void actionPerformed(ActionEvent e) {
            Navigator.showMenu();
        }
    }
);

Так я могуНичего не использовать повторно, так какs анонимный внутренний класс ...

Теперь я могу думать о следующих решениях:

Сохраните ссылку на Anonymous Inner Class в поле (которое, скорее всего, будетstatic final);Написать новый класс, который реализуетActionListener интерфейс.

Пример кода для решения 1:

public static final MENU_ACTION_LISTENER = new ActionListener() {
    public void actionPerformed(ActionEvent e) {
        Navigator.showMenu();
    }
};

btnMenu.addActionListener(MENU_ACTION_LISTENER);

Пример кода для решения 2:

// package-private, only GUI-package classes should be able to use it.
// most likely I won't ever need to subclass it, so why not making it final?
final class MenuActionListener implements ActionListener  {
    public void actionPerformed(ActionEvent e) {
        Navigator.showMenu();
    }
}

// now, wherever I need to use it:
btnMenu.addActionListener(new MenuActionListener());

У меня есть некоторые сомнения по поводу обоих решений:

Где хранить ссылки на Anonymous Action Listeners? Я мог бы иметь своего рода служебный класс (например,ActionListenersUtil) где хранятся все слушатели действий, в которых я хочу повторно использоватьstatic final поля, но я немне это не нравится ... мне кажется, плохой дизайн.

Это имеет больше смысла, вероятно, лучше всего следуетШаблон команды... у меня изначально были некоторые сомнения по поводу пакетов ... яхотелось бы, чтобы все слушатели были в отдельном пакете (например,com.myapp.gui для графических элементов иcom.myapp.gui.listeners для слушателей. Но когда я записал это, я понял, что у меня нет выбора: единственное место, где это имеет смысл, находится в одном пакете (потому что онидолжен быть частным), даже если бы я хотел заказать их в отдельную упаковку. У меня все еще есть некоторые сомнения, потому что большинство слушателей действия могут быть повторно использованы даже в случае изменения GUI; все еще было бы неплохо иметь его в одной упаковке?

Другой вопрос: чтоРазница между звонкамиbtnMenu.addActionListener(MENU_ACTION_LISTENER); а такжеbtnMenu.addActionListener(new MenuActionListener()); (если говорить о JVM, загрузке классов, компиляции классов, памяти, занятой каждым классом, сборке мусора и так далее)?

Пожалуйста, помогите, яя так растерялся прямо сейчас! :(

Ответы на вопрос(1)

Ваш ответ на вопрос