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.