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