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