2013-03-20 3 views
0

Here в русской ссылке Википедии есть пример реализации C++ Command Design Pattern на C++. Как я понимаю, от реализации по сравнению с классом UML диаграммы, я вижу, что:Шаблон проектирования команд реализован с некоторыми ошибками?

  1. Класс документа является Чешуи на диаграмме
  2. класса это команда на диаграмме
  3. класс InsertCommand является ConcreteCommand в диаграмма
  4. класс приемника является приемник на диаграмме

Кроме того, как видно из диаграммы, Invoker агрегатов Command. Но в нашем случае класс Document не объединяет команду. Это ошибка? Или это вариант шаблона команды? Насколько строго следует использовать UML-диаграмму в целом для проектирования конкретного шаблона?

+2

Вам не обязательно быть строгим. Шаблоны описывают часто повторяющиеся проекты, а не предписывают дизайн. –

+0

Если документ не знает (как вызвать) команды (ов), как документ может вызвать их выполнение? (... может быть, другой класс - настоящий invoker.) – Beachwalker

+0

Я не понимаю, например, правильно ли, что Class Document является Invoker? – Narek

ответ

1

Namings, например C++ не так хорошо, как я понимаю их следующим образом:

  • Document является Receiver, объект, чтобы применить команды на
  • Receiver класса действует как Invoker с точки зрения при условии UML диаграмма.
  • main метод является Client

Вы могли бы взглянуть на примере Java, это более чистый.

+0

Когда я подумал о диаграмме, я пришел к тому же выводу, что и вы. Но когда я подумал об этом, я понял, что если «class Receiver» является Invoker, что он делает в «main()», который является клиентом? Посмотрите на диаграмму. Клиент должен использовать приемник. – Narek

+0

Клиент использует Invoker, а не UML в русской вики, но из определения шаблона: _ «... Клиент содержит решение о том, какие команды выполнять в каких точках. Для выполнения команды он передает объект команды к объекту invoker ... "_ – udalmik

+0

Итак, диаграмма UML неверна? – Narek

Смежные вопросы