Говоря с научной точки зрения, шаблон Command - это OO-реализация замыканий из функционального программирования, и его следует использовать соответствующим образом.
Предположим, у вас есть управление кнопками: при его нажатии необходимо выполнить какое-то действие.Это действие - это ConcreteCommand.Это может быть простой указатель на функцию (в C или C ++).Но если ему нужна дополнительная информация, например, от других элементов управления или пользовательского ввода, они также должны быть где-то захвачены.По этой причине удобно иметь объект, который будет захватывать эту дополнительную информацию.
В качестве побочного эффекта вы можете хранить команды в некотором контейнере и задерживать их выполнение, или вы можете отслеживать, какие команды выполнялись,или вы можете откатить их позже и т. д.