Согласно приведенному GOF (Gang of Four) определению (по Comptrol), Functor и Command - это два разных паттерна.
Как уже говорилось, Functor представляет класс, содержащий метод службы, другими словами: основная ответственность за класс functor заключается в хранении конкретной логики, реализованной в его собственном методе. Следовательно, мы можем думать в функторе, как контейнер для внутренней логики его собственного метода. Исторически сложилось, что Functor рождается потому, что в спецификации Java нет реализации и / или концепции «указателя функции», что очень полезно в контексте зарегистрированных обратных вызовов (конкретной реализации для шаблона наблюдателя).
Командный паттерн представляет собой паттерн Design, предназначенный для отделения сущности Invoker от сущности Receiver. Он в основном используется, когда необходимо разделить действия (генерировать события) от слушателей действий (подумайте о графическом интерфейсе). У него есть метод, отвечающий за исключение конкретной операции (в зависимости от конкретной реализации команды из ее собственного суперкласса), ссылающейся на конкретный объектный приемник; в указанном определении метод выполнения может быть определен как «не интеллектуальный», фактически с интеллектуальной реализацией можно было бы самому реализовывать оперативную логику вместо делегирования ее третьему объекту.
Когда у нас есть умный метод выполнения, мы реализуем функтор и помещаем функтор (конкретную реализацию подкоманды команды) в контекст шаблона команды.
Надеюсь, это будет полезно для вас.