我知道这个理论,但很明显,当谈到现实世界时,我只是不知道。在下面的例子中是游戏和玩家/棋盘之间的关系(他们是在Game类中实现的)?在董事会和典当之间 - 聚合,因为董事会可以存在0个棋子?
Class Game
{
Player p;
Gameboard b;
void Start()
{
p=new Player();
b=new Gameborad();
}
}
class Gameboard
{
List<pawn> listOfpawns=new List<pawn>();
}
}
答案 0 :(得分:1)
组合和聚合之间的区别不在于棋盘是否可以零棋子存在,而是棋子是否可以在没有棋盘的情况下存在,以及玩家和游戏板是否可以在没有游戏的情况下存在。
换句话说,如果破坏游戏会破坏所有玩家和棋盘,那么你就有了作曲。如果玩家和棋盘可以在游戏之外生活,那么你就可以聚合。
如果用摧毁棋子摧毁棋盘那么你就有了构图。如果棋子可以在没有棋盘的情况下生活,那么你就有了聚合。
一般来说,如果破坏容器会破坏其元素,那就是构图。存在不依赖于容器的元素据说是通过聚合来保存的。
汇总的典型例子是:
构图的经典例子是:
答案 1 :(得分:0)
<强>组合物强>
对象包含按值存储的其他对象。这些通常是您认为持有它们的对象内部的元素,就像cardDeck对象具有卡对象一样。即使甲板最初未被填充,对象大多只有内部的保持对象。
<强>聚合强>
一个对象包含对其他对象的引用,聚合对象是在另一个上下文中程序中存在的东西,而父对象只是出于组织或功能的原因而持有它们。以下站点参考中给出的示例是保存人物对象的平面。这些人可以来来去去,也可以用在该计划的其他部分。
在这种情况下:
你的例子我会说在写作下更多。就像纸牌一样,棋子在游戏板外没什么意义。
<强>术语强>
“按价值”或“按参考”的字面意思取决于语言,当人们在这种情况下说出一个或另一个时,他们用它来指代父母拥有的拥有关系有多强。
当然在Java中所有对象都是通过引用存储的,但是!一旦没有对象的引用,它最终会被GC剔除。飞机很可能只保留了发动机的参考,因此当飞机拆除时发动机会死亡。人们可以在飞机外面引用其他东西,所以你可以把它想象得更像是飞机直接拿着它们。
答案 2 :(得分:0)
Ray和Vigilant是正确的,但适合你的是更多地取决于(目标)应用程序然后它对对象本身。
或