Parameterize objects by an action to perform. Specify, queue, and execute requests at different times. Support logging changes. Structure a system around high-level operations built on primitives operations. Collaborations Consequences 1.
Command decouples the object that invokes the operation from the one that performs it.
Commands are first-class objects. It's easy to add new Commands. Supporting undo and redo. Avoiding error accumulation in the undo process. Store more information in the command to ensure that objects are restored to their original state.