我正在使用聚合和组合为模拟创建实体。
在以下 C++ 示例中:
class CCar
{
CCar( CDriver* pDriver )
{ m_pDriver = pDriver; }
CDriver* m_pDriver;
CEngine m_Engine;
CDriverControls m_Controls;
};
在上面的例子中,一辆汽车由一个发动机和一组驾驶控制(按组合)组成。一辆车还必须有一个司机(通过聚合)。
但这只是解释了层次关系——驾驶员属于汽车,引擎和控件也属于汽车。但是这些成员也都相互关联——驾驶员必须对控件执行操作,控件必须对引擎执行操作。这些关系也可以在多个方向上发挥作用——发动机可能会熄火并导致控制装置失灵,或者控制装置可能会疯狂旋转并伤害驾驶员?如果驾驶员不喜欢发动机的声音并离开汽车怎么办?这些关系如何运作?
我正在从经常与其他对象交互的许多不同对象中合成许多不同的实体,并且对如何以设计的方式管理这些关系感兴趣。
谢谢你!
编辑:
正如回复所暗示的,管理此问题的一种方法是将汽车指向驾驶员,并为驾驶员提供指向汽车的指针等。这很有意义并解决了这个具体的例子。然而,在设计意义上,这增加了驾驶员的责任,这个对象的任务是跟踪它属于哪辆车,但这肯定是容器的责任来跟踪哪些对象属于一起?同样,让 CCar 负责管理这些关系会将 CCar 变成一个 blob。是否有处理这些关系的设计解决方案?