Шаблон проектирования адаптера - типы отношений между ролями
Мне интересно узнать об отношениях (Агрегация, Состав) между различными ролями шаблона проектирования адаптера. У меня все еще есть немного путаницы по поводу ассоциации и агрегации. Я разместил диаграмму классов Адаптера ниже. Мне нужно знать, находится ли adaptee в агрегационных отношениях с адаптером.
Отношение агрегации определяется, как показано в следующем фрагменте кода. Я знаю, что агрегация не подразумевается в UML, но я вижу, что в адаптере и адаптере есть аналогичная реализация, как показано в приведенном ниже коде.
final class Car {
private Engine engine;
void setEngine(Engine engine) {
this.engine = engine;
}
void move() {
if (engine != null)
engine.work();
}
}
Может кто-нибудь объяснить, почему отношения между адаптером и адаптером не попадают в категорию агрегации.
1 ответ
Агрегация является частью отношений.
,
,В дни до UML люди обычно были довольно расплывчаты в отношении того, что такое агрегация и что такое ассоциация. Независимо от того, расплывчаты они или нет, они всегда были несовместимы со всеми остальными. В результате многие разработчики моделей считают, что агрегация важна, хотя и по разным причинам. Таким образом, UML включает агрегацию, но практически без семантики. Как говорит Джим Рамбо: "Думай об этом как о модельном плацебо"
Цитируется из UML Distilled: краткое руководство по стандартному языку моделирования объектов, третье издание.
Таким образом, согласно определению, адаптер может не объединять адаптера. Другими словами, адаптер не может быть частично связан с адаптером.
Другое дело, что агрегация не имеет семантики, поэтому использование ее стало более или менее личным выбором.
Одна последняя вещь. Я всегда чувствовал некоторую неопределенность в отношении разницы между ассоциацией, агрегацией и составом, но после прочтения DDD Эриком Эвансом у меня появилось другое предположение, поэтому я написал статью на эту тему. Если вы хотите взглянуть на отношения в контексте.