Command Design Pattern
Introduced in CS247.
The Command Design Pattern is about using objects to encapsulate behavior of some “action” with a system.
When to use Command Pattern
Have classes that represent an “action” or “command” in our program.
Example
Example: Consider writing an IDE, using MVC - we might have model/controller relationship where controller calls model methods, like:
Model::insert TextModel::copyModel::pasteModel::changeSyntaxHighlighting
This is a decent design - but it doesn’t allow for some features we might desire:
- Macros - replaying sequences of instructions
- Undo / redo
Command pattern: Instead of manipulating the model directly - pass commands to an invoker

Command object has whatever information it needs to perform its given action - maybe model, maybe subjects within the model
- Controller would create command objects, supply with info they need
- Sends abstract commands to the
Invokerfor processing Invokercalls each action method to execute the command
Invoker can maintain additional state - stack of commands for undo / redo, or mapping of a macro keyword to a list of commands.