Специальный метод должен вызываться после любого выполнения AbstractAction - PullRequest
0 голосов
/ 18 июля 2011

Пожалуйста, извините за неопределенное название вопроса, но обычно я не делаю такого рода вещи. Итак, у меня есть следующая проблема:

Я разрабатываю всплывающее меню для конкретного приложения, в котором каждый элемент меню связан с определенным действием:

public class CanvasMenu extends JPopupMenu {        
    public CanvasMenu(){
       this.add(new AbstractAction("Do some operation") {
           @Override
           public void actionPerformed(ActionEvent arg0) {
                doSomeStuff1();
                cleanup(); // has to be done after every menu operation
           }
    });

        this.add(new AbstractAction("Other operation") {
            @Override
            public void actionPerformed(ActionEvent e) {
                doSomeOtherStuff();
                cleanup(); // has to be done after every menu operation
            }
        });
    }
}

Я где-то читал, что AbstractAction используется для таких задач, когда вы хотите добавить пункты меню и связать их с каким-либо действием. На самом деле я хочу не только два таких действия, но и несколько десятков из них.

Проблема в том, cleanup вещь. cleanup должно быть после любого из этих действий. Это означает, что если я продолжу описанным выше образом, мне придется написать cleanup() для каждого AbstractAction.

Есть ли какой-либо (простой / элегантный / красивый) способ или шаблон, чтобы не писать cleanup() снова и снова? То есть возможно ли написать что-то, что получит только действие, и после его выполнения автоматически вызовет cleanup?

1 Ответ

3 голосов
/ 18 июля 2011

Это один из паттернов:

abstract class ActionWithCleanup extend AbstractAction {
       @Override
       public final void actionPerformed(ActionEvent arg0) {
            myAction();
            cleanup(); // has to be done after every menu operation
       }

       public abstract void myAction();
}

...

this.add(new ActionWithCleanup("Do some operation") {
       @Override
       public void myAction() {
            doSomeStuff1();
       }
});
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...