Если нам нужна история (или любое действие перед выполнением команды), то есть смысл сделать этот класс. Но тогда это нарушает принцип единой ответственности, да? Теперь это не только делегат, он еще и историю там хранит.
Я полностью согласен с ответом Андреаса. Если вы думаете, что выполняете несколько обязанностей, разбейте их на разные методы.
Принцип единой ответственности приятно слышать, но мы не должны уделять этому принципу слишком много внимания. Если вы строго следуете этому принципу, я уверен, что кодовая база загромождена слишком большим количеством мелких классов. Я не думаю, что какой-либо из крупных проектов в индустрии программного обеспечения использует этот принцип. Лучшее, что мы можем сделать, это иметь разные методы в одном классе для разных действий.
Если нам не нужна история, я не вижу цели создавать этот инвокер, который просто выполняет делегирование. Является ли единственная причина для этого просто предположением, что нам понадобится какая-то логика до/после выполнения команды в будущем?
Основным УТП шаблона Command является Invoker. Он разделяет клиента ( Sender) и Receiver.
Из статьи oodesign:
Клиент запрашивает команду для выполнения. Invoker принимает команду, инкапсулирует ее и помещает в очередь на случай, если сначала нужно сделать что-то еще, а ConcreteCommand, отвечающая за запрошенную команду, отправляет ее результат Receiver.
Я объяснил роль Invoker в вопросе SE ниже:
Шаблон команды кажется излишне сложным ( что я не понимаю?)
person
Ravindra babu
schedule
31.05.2016