Каково отношение «создает» / создание экземпляра между двумя классами? - PullRequest
0 голосов
/ 06 июня 2019

Из паттернов дизайна Гаммы и др.

Ссылка на объект, представляющая отношение части или агрегации, обозначено линией со стрелкой на голове с ромбом в основании. Стрелка указывает на класс агрегированный (например, Shape).

линия со стрелкой без ромба обозначает знакомство (например, LineShape сохраняет ссылку на объект Color, который другой формы могут делиться). Имя для ссылки может появиться рядом с базой, чтобы различать это из других ссылок

Еще одна полезная вещь для показа - какие классы создают какие другие. Мы используем пунктирную линию со стрелкой, чтобы указать это, так как OMT не поддерживает это. Мы называем это "создает" отношения. Стрелка указывает на класс, который создан. В Рисунок c, CreationTool создает объекты LineShape.

enter image description here

Я хотел бы понять, что книга подразумевает под "творит" отношениями.

Когда класс A создает экземпляр класса B, должен ли класс A иметь член поля, ссылающийся на объект B, или класс A должен иметь метод, который создает и возвращает объект B?

Существует ли какой-то шаблон проектирования (например, описанный в той же книге), который использует отношение «создает» / создание экземпляра? Я не смог его найти.

1 Ответ

1 голос
/ 07 июня 2019

A создает B просто означает, что код внутри A напрямую создает экземпляры B - с помощью ключевого слова new. Код может быть в конструкторах или любых методах A или в любом месте внутри A.

Причина такого отношения заключается в том, что это сильное отношение, то есть оно вызывает тесную связь между классами. Когда класс A напрямую создает экземпляры класса B, мы не можем повторно использовать A в другом контексте, где мы хотим, чтобы A создавал экземпляры дочернего класса B без изменения исходного кода A.

Чтобы иметь такую ​​гибкость, мы часто используем шаблон Factory Method или шаблон Abstract Factory. В этих шаблонах задача непосредственного создания экземпляров принадлежит дочернему классу A (фабричный метод) или конкретному фабричному классу (абстрактная фабрика).

...