Encapsulates a request as an object, thereby letting you parmeterize other objects with different requests, queue or log requests, and support undoable operations.
Allows you to create macros of commands so that you can execute multiple commands at once.
Removes the responsbility for handling 'null' from the client when you don't have a meaningful object to return.