Стрелки зависимостей в диаграммах UML GOF Patterns - PullRequest
1 голос
/ 03 ноября 2011

Мне более или менее понятно, что такое паттерны GOF и как они себя ведут.
Тем не менее, я чувствую, что упускаю что-то глобальное (в UML или шаблонах), поскольку на многих диаграммах классов GOF я нарисую одну или две дополнительные стрелки, если попытаюсь повторить их в своем уме.Я понимаю, что диаграмма UML не обязательно должна отображать все соединения, но почему не все соединения представлены в виде кратких диаграмм шаблонов.

Несколько примеров:

Фабричный метод Диаграмма UML:
http://en.wikipedia.org/wiki/Factory_method_pattern

Почему нет линии связи (сплошная сплошная стрелка) от Создателя к Продукту?Для FactoryMethod есть примечание: «product = FactoryMethod ()».Это означает, что Создатель отслеживает Продукт.Почему в UML нет соединения?

Шаблон команды UML-диаграмма:
http://en.wikipedia.org/wiki/Command_pattern

Почему Invoker осиротел?Клиент связан с Receiver, зависит от конкретной команды, но ему нужно передать команду в Invoker.Почему нет связи между Клиентом и Invoker?

Спасибо за ваши ответы.

1 Ответ

1 голос
/ 03 ноября 2011

Вы путаете структуру с поведением.

Ассоциация подразумевает структурную зависимость, обычно отношение «имеет». A имеет B. Однако, это больше похоже на «Билл имеет палец», а не «Билл имеет кошелек». Иногда у Билла может быть кошелек, но он не является чем-то структурно определяющим как человеческое существо.

Есть ли у Creator продукт? Нет, не структурно. Никто не делает Concreate Creator. Они создают экземпляр Продукта, а затем возвращают его (я не уверен, что ассоциация Реализов уместна там, никогда не думал о возврате чего-либо как реализации этого). В большинстве случаев они не отслеживают Продукт.

Рассмотрим класс Chef, который создает объект Meal. Шеф-повар следит за едой после того, как вернул ее в класс Клиента? Нет, он на следующий прием пищи. Следовательно, нет никакой связи между шеф-поваром и едой.

Да, это правда, что шеф-повар временно владеет едой, поскольку он готовит ее, но еда не является структурной частью шеф-повара. Он только создает Еду и передает ее потребителю. Диаграммы объектов показывают структуру объектов, а не методы объектов. Это другой вид диаграммы, такой как Диаграмма Деятельности.

Что касается вопроса о шаблоне Command, Invoker зависит от интерфейса, а не от самого объекта Command. Поскольку Invoker зависит только от интерфейса, вы можете передать ему любой тип объекта, который реализует интерфейс. Это не обязательно даже команда, если она притворяется.

Invoker не знает, на что он ссылается, поэтому нет зависимости и нет ассоциации. В качестве примера рассмотрим, что кто-то завязывает вам глаза и просит вас идентифицировать предмет, который он вам дает. Вы можете сказать, сколько объектов, но некоторые - нет. Например, вы можете не знать разницы между тестом для хлеба и тестом или большим апельсином и небольшим грейпфрутом. Для всех намерений и целей большой апельсин и маленький грейпфрут реализуют один и тот же тактильный интерфейс, но они дают разные результаты, когда вы их исполняете (съедаете их).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...