Я хочу знать, какова Связь между общей стеной (расположенной в соседней комнате) и комнатами.
Насколько я знаю, связь между комнатой и ее стенами такова: Композиция, а не агрегация
(правильно?)
И согласно определению
Композициисодержащийся объект не может быть совместно используется двумя
контейнерами, тогда как в
агрегацииэто возможно
.
Теперь я запутался, как лучше всего представить отношения между общей стеной и комнатами, расположенными рядом с ней?
Было бы весьма признательно, если бы вы могли дать свои советы с некоторым кодом.
|--------|--------|
Подход1:
(wall class ---- room class) /Composition
Подход2:
wall class ----- room class /Aggregation
Подход3:
у нас есть класс стены и класс общей стены, класс общей стены наследуется от класса стены
adjoining room class ---- (1) Common wall class /Aggregation
adjoining room class ---- (6) wall class / composition
Подход4: Я разработчик, а не дизайнер :) так что это моя идея:
class Room
{
private wall _firstwall ;
private wall _secondtwall;
private wall _thirdwall ;
private wall _commonwall ;
public Room( CommonWall commonwall)
{
_firstwall=new Wall();
_secondtwall=new Wall();
_thirdwall=new Wall();
_commonwall=commonwall;
}
}
Class CommonWall:Wall
{
//...
}
// где-то:
static void main()
{
Wall _commonWall=new Wall();
Room room1=new Room(_commonWall);
Room room2=new Room(_commonWall);
Room [] adjacentRoom =new Room[2]{room1,room2};
}
Редактировать 1:Я думаю, что это ясный вопрос, но просто для большего пояснения:
Суть вопрос состоит в том, чтобы выяснить, каков наилучший шаблон или подход к моделированию отношений для объекта, который является компонентом двух других объектов в одно и то же время.
и о моем примере: что я имею в виду под «комнатой»?, конечно, я имею в виду закрытую квадратную комнату с 4 стенами и одной дверью. но в этом случае одна из этих стен является общей стеной и разделена между двумя соседними номера.