Use cases
Many developers use the undo example as the only use case of the Command pattern. The truth is that undo is the killer feature of the Command pattern. However, the Command pattern can actually do much more [GOF95, page 265], [j.mp/commddp]:
GUI buttons and menu items: The PyQt example that was already mentioned uses the Command pattern to implement actions on buttons and menu items.
Other operations: Apart from undo, Command can be used to implement any operation. A few examples are cut, copy, paste, redo, and capitalize text.
Transactional behavior and logging: Transactional behavior and logging are important to keep a persistent log of changes. They are used by operating systems to recover from system crashes, relational databases to implement transactions, filesystems to implement snapshots, and installers (wizards) to revert cancelled installations.
Macros: By macros, in this case, we mean a sequence of actions that can be recorded and executed on demand at any point in time...