Benefits:
• It separates the object that invokes the operation from the object that actually performs the operation.
• It simplifies adding new commands, because existing classes remain unchanged.
Applicable Scenarios:
• You need to parameterize objects according to an action to perform.
• You create, queue, and execute requests at different times.
• You need to support rollback, logging, or transaction functionality.