sia*_*mak 6 c# composition relationship aggregation
我想知道共同墙(位于相邻房间)和房间之间的关系.
我知道房间和墙壁之间的关系是Composition not Aggregation(我是对的吗?)
And according to the definition of 组合 the contained object can't be shared between two containers, whereas in 聚合 it is possible.
现在我很困惑,最好的建模方法是什么,以表示共同墙和旁边的房间之间的关系?
如果您能为您的建议提供一些代码,那将是非常赞赏的.
| -------- | -------- |
Approch1:
(wall class ---- room class) /Composition
Run Code Online (Sandbox Code Playgroud)
Approach2:
wall class ----- room class /Aggregation
Run Code Online (Sandbox Code Playgroud)
Approch3:
我们有一个墙类和一个公共墙类,公共墙类继承自墙类
adjoining room class ---- (1) Common wall class /Aggregation
adjoining room class ---- (6) wall class / composition
Run Code Online (Sandbox Code Playgroud)
方法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
{
//...
}
Run Code Online (Sandbox Code Playgroud)
//在某些地方:
static void main()
{
Wall _commonWall=new Wall();
Room room1=new Room(_commonWall);
Room room2=new Room(_commonWall);
Room [] adjacentRoom =new Room[2]{room1,room2};
}
Run Code Online (Sandbox Code Playgroud)
编辑1: 我认为这是一个明确的问题,但需要进一步澄清:
问题的关键在于找出最佳模式或方法,以便为同时构成另外两个对象的对象建立关系.
关于我的例子:我的意思是"房间"?我当然是指一个带有4个墙和一扇门的封闭式方形房间.但在这种情况下,其中一个墙是一个共同的墙,在两个相邻的房间之间共用.
Bob*_*orn 16
关于房间和墙壁的问题的答案就是这个问题的答案:"没有房间,墙可以存在吗?"
我相信您的方案是使用聚合.没有房间的墙可以存在吗?当然可以.人们可以通过摧毁三面墙来破坏房间,但剩下的墙壁就是独立的.我认为我们现在已经归结为语义.这个答案可以根据如何改变你在观看墙上的场景.
此链接显示了一种简洁的方式来考虑它:
同样在这里:
聚合意味着孩子可以独立于父母存在的关系.示例:Class(父级)和Student(子级).删除班级,学生仍然存在.
构成意味着孩子不能独立于父母而存在的关系.示例:住宅(父母)和房间(儿童).房间不是独立于房子
来自维基百科:
聚合与普通组成的不同之处在于它并不意味着所有权.在组合中,当拥有对象被破坏时,包含的对象也被破坏.在汇总中,这不一定是真的.例如,一所大学拥有各个部门(例如化学),每个部门都有一些教授.如果大学关闭,部门将不复存在,但这些部门的教授将继续存在.因此,大学可以被视为一个部门的组合,而部门则有教授的集合.此外,教授可以在多个部门工作,但一个部门不能成为一个以上大学的一部分.