Да, поэтому создание объекта, который инкапсулирует поведение и другую информацию, необходимую для выполнения действия, можно рассматривать как использование шаблона команды .
В статье Википедии, указанной выше, используется интерфейс 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
функционирует как объект, следующий за шаблоном команды, поскольку он инкапсулирует некоторое действие, которое должно быть выполнено в то время, когда действие происходит.