Java
Usage examples: The Command pattern is pretty common in Java code. Most often it’s used as an alternative for callbacks to parameterizing UI elements with actions. It’s also used for queueing tasks, tracking operations history, etc.
Here are some examples of Commands in core Java libraries:
All implementations of
java.lang.RunnableAll implementations of
javax.swing.Action
Identification: If you see a set of related classes that represent specific actions (such as “Copy”, “Cut”, “Send”, “Print”, etc.), this may be a Command pattern. These classes should implement the same interface/abstract class. The commands may implement the relevant actions on their own or delegate the work to separate objects—that will be the receivers. The last piece of the puzzle is to identify an invoker—search for a class that accepts the command objects in the parameters of its methods or constructor.
Text editor commands and undo
The text editor in this example creates new command objects each time a user interacts with it. After executing its actions, a command is pushed to the history stack.
Now, to perform the undo operation, the application takes the last executed command from the history and either performs an inverse action or restores the past state of the editor, saved by that command.
commands
commands/Command.java: Abstract base command
package refactoring_guru.command.example.commands;
import refactoring_guru.command.example.editor.Editor;
public abstract class Command {
public Editor editor;
private String backup;
Command(Editor editor) {
this.editor = editor;
}
void backup() {
backup = editor.textField.getText();
}
public void undo() {
editor.textField.setText(backup);
}
public abstract boolean execute();
}commands/CopyCommand.java: Copy selected text to clipboard
commands/PasteCommand.java: Paste text from clipboard
commands/CutCommand.java: Cut text to clipboard
commands/CommandHistory.java: Command history
editor
editor/Editor.java: GUI of text editor
Demo.java: Client code
OutputDemo.png: Execution result

Last updated