The Command design pattern encapsulates a request as an object, thereby allowing you to parameterize clients with different requests, queue or log requests, and support un-doable operations.
In Java, the command pattern is used for event handling, multi-level undo-redo, thread pools, and more.
It also promotes loose coupling between request sender and receiver, and allows for extensibility of commands.