You’d naturally think about using the pattern when
? You want your application to support undo/redo.
? You want to parameterize an action as an object to perform operations and replace callbacks with different command objects
? You want to specify, queue, and execute requests at different times.
? You want to log changes so they can be reapplied later in case of a system failure.
? You want the system to support transactions with which a transaction encapsulates a set of changes to data.