Понять шаблон команд в Swing - PullRequest
3 голосов
/ 09 июня 2009

Я вижу, как Swing использует паттерн Decorator и Observer.

Наблюдатель: каждый компонент (например, JButton) - это субъект, который может добавить observers(ActionListeners). Когда кто-то нажимает кнопку, он уведомляет все свои ActionListeners, вызывая их actionPerformed(ActionEvent e).

А как насчет командного шаблона?

Когда я создаю классы, которые реализуют ActionListener (например: MyActionListener), actionPerformed(ActionEvent e) теперь является командой execute?

Меня смущает, что actionPerformed(ActionEvent e) используется как execute(), так и update() метод. Я здесь?

Ответы [ 4 ]

5 голосов
/ 09 июня 2009

Вот статья, которая поможет. По сути, это говорит о том, что вы можете создавать конкретные классы команд, которые взаимодействуют с целевым объектом, получая ActionListener. Затем вы можете раскрыть, что будет делать вызывающий событие action, зарегистрировав в нем эти разъединенные команды.

3 голосов
/ 09 июня 2009

Да, поэтому создание объекта, который инкапсулирует поведение и другую информацию, необходимую для выполнения действия, можно рассматривать как использование шаблона команды .

В статье Википедии, указанной выше, используется интерфейс Action в качестве примера шаблона команды в Swing. Интерфейс Action является подынтерфейсом ActionListener, поэтому класс, который реализует Action, должен будет реализовать метод actionPerformed.

Следовательно, класс, реализующий Action, будет инкапсулировать некоторые операции, которые будут выполнены, когда произойдет действие. И сам этот класс, как видно, следует шаблону команды.

В целом, когда дело доходит до реализации, AbstractAction может быть проще в использовании, чем реализация Action, так как он имеет несколько методов, которые необходимо переопределить. Пример использования AbstractAction может быть:

class MySpecialAction extends AbstractAction {
    @Override
    public void actionPerformed(ActionEvent e) {
        // Perform operations.
    }
}

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

MySpecialAction action = new MySpecialAction("Special Action", mySpecialIcon);

Затем действие может быть зарегистрировано для нескольких компонентов, таких как JButton s, JMenuItem s и тому подобное. В каждом случае будет вызываться один и тот же объект MySpecialAction:

JMenuItem specialMenuItem = new JMenuItem(action);

/* ... */

JButton b = new JButton(action);

В обоих случаях действие, связанное с каждым компонентом, кнопкой и пунктом меню, относится к одному и тому же объекту действия или команде MySpecialAction. Как мы видим, объект MySpecialAction функционирует как объект, следующий за шаблоном команды, поскольку он инкапсулирует некоторое действие, которое должно быть выполнено в то время, когда действие происходит.

0 голосов
/ 01 июля 2013

Вот мое мнение:

http://blue -walrus.com / 2011/10 / поворотно-и-дизайн-patterns-% E2% 80% 93-часть-3-командной шаблон /

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

0 голосов
/ 09 июня 2009

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...