Use the Command pattern when…

You have:
  • Commands that different receivers can handle in different ways
  • A high-level set of commands that are implemented by primitive operations
You want to:
  • Specify, queue, and execute commands at different times
  • Support an Undo function for commands
  • Support auditing and logging of all changes via commands