Мы пытаемся применить шаблон команды к одному из наших проектов. Каждый объект команды имеет различный вид и количество параметров. Какой шаблон лучше всего подходит для создания этих командных объектов? В настоящее время я изучаю абстрактный шаблон фабрики и строителя. Я все еще любитель в дизайне. Может ли кто-то рекомендовать образец, который будет наиболее подходящим для моего требования?Предложенный шаблон для построения объектов команды при использовании шаблона команды
ответ
Насколько мне известно, традиционно не используется шаблон для создания команд. Вот UML Командного Pattern:
Как вы можете видеть выше, Client
напрямую соединен с ConcreteCommand
и картина даже говорит, что создает их.
Каждый объект команды имеет различный вид и количество параметров.
Эта деталь затруднит отделить создание объекта от кода клиента.
Одним из простых способов является использование так называемого Simple Factory (aka Concrete Factory).
Намерение здесь инкапсулировать создание команд с использованием метода CommandFactory.createCommand(...)
. Клиентский код не хочет знать подробности о new CommandA(...)
и т.д.
Однако так как конструктор для каждой конкретной команды имеет различные параметры, вам нужен клиент предоставить эту информацию в createCommand(...)
метода. На мой взгляд, эта модель не принесет большой пользы, поскольку Клиент должен предоставить почти то же количество деталей с шаблоном или без него. Это может быть полезно, если вы не хотите, чтобы Клиент знал точные имена ConcreteCommands.
Например, без шаблона Simple Factory, Client
должен был бы сделать new CommandA(arg1, arg2)
(прямое соединение с конкретной командой). С шаблоном Simple Factory Client
должен был бы сделать CommandFactory.createCommand("A", arg1, arg2)
, где «A» (или что-то подобное) является дискриминатором для создания ConcreteCommand. Если вы добавили CommandD
к вашему дизайну, Client
все равно нужно было изменить (ему нужно было бы позвонить createCommand("D", ...)
) и вам нужно было бы обновить CommandFactory
. Похоже на большую сложность для небольшой выгоды.
Использование фабричного метода или абстрактного шаблона фабрики кажется еще более сложным, но ваш вопрос не дает достаточно деталей, чтобы действительно знать наверняка.
- 1. CLI - Игнорировать строку при использовании команды для команды
- 2. Совершенствование организации кода при использовании шаблона команды в Scala
- 3. Ошибка при использовании команды SUDO
- 4. Ошибка при использовании команды ExportAsFixedFormat
- 5. Tcl: ошибка при использовании команды
- 6. Аудит объектов при использовании пользовательской команды SQL (пакетное удаление)
- 7. Шаблон проектирования для предварительного просмотра эффекта шаблона команды
- 8. Шаблон проектирования команды
- 9. Пользовательский пример шаблона команды WPF
- 10. Как использовать переменную для построения команды
- 11. Использование команды команды цепочки объектов с представлением
- 12. Это шаблон команды?
- 13. Отсутствует шаблон городской команды
- 14. Шаблон команды в Rust
- 15. Дизайн шаблона команды
- 16. Использование дизайна шаблона команды
- 17. Шаблон команды против отражения
- 18. Как работает шаблон команды?
- 19. Использование шаблона команды для хранимых процедур
- 20. Использование resque для реализации шаблона команды
- 21. Шаблон команды для передачи методов деятельности приложения?
- 22. Мне нужен шаблон для построения деревьев объектов
- 23. Реализация шаблона команды и полиморфизма
- 24. Если при использовании зарезервированного идентификатора при использовании команды выдается предупреждение?
- 25. Добавление последовательностей при использовании команды INSERT INTO
- 26. Выполнение шаблона команды в WPF
- 27. Ошибка при использовании команды отладки Play Framework
- 28. Ошибка при использовании команды «rails server»
- 29. Включение команд при использовании команды BREAK ON
- 30. Ошибки при использовании Java -classpath команды
Вы можете создать фабрику singleton, в которой вы создадите команды. Трудность заключается в настройке параметров. Вы могли бы просто использовать карту и простой интерфейс или создать фабрику, чтобы предоставить вам определенный объект параметра для вашей команды. –
Предоставьте более подробную информацию об атрибутах команд, все ли они необходимы, имеют ли команды много конструкторов, имеют ли команды CommMands одни и те же параметры? –