Command
Where there is a need to parameterise objects by the action to be performed.
Where there is a need to queue/log requests or compose primitive actions to macros or scripts.
Where multiple undo/redo is needed.
GUI applications/interfaces.
Network protocols / commands / transactions.
Decouples invoker from receiver.
Command objects can be passed around, saved and exchanged.
Addition of new commands is easy, even at runtime.