我有一个A类,它有一组B类对象。 A类也可以从A类的其他实例“继承”(缺少更好的术语)B类对象的集合。为了对此进行建模,A类的实例指向A类的其他实例(我控制循环引用) )。
一个简单的具体例子可能是一个人有生育子女,但也“继承”配偶和前配偶的子女。
在运行时,我在应用程序中使用和不使用继承对象的A类实例。也就是说,在我在不同场景中的应用环境中,A类实例的“预测”对我来说都是有意义的。
我的问题是,是否存在编码此类模型或标准术语的模式?我不认为'继承'在这里是正确的词。我有自己的方法来处理技术和我自己繁琐的术语,但我想象有一个我能坚持的标准模式,我似乎无法找到。
一个不完美的模拟是使用和不使用它们的继承方法检查.NET类的方法,或者在Javascript中检查原型,但是这里我'继承'记录/对象。
答案 0 :(得分:2)
对我来说看起来像composite pattern,A对象是复合体和B叶子。指向其他对象A的一个对象A是根项。差异似乎是在获取叶子项时,您可以区分根项目是否包含来自其知道与否的其他复合材料的叶子项目。
答案 1 :(得分:1)
不,我不认为(A)你正在做的事情有共同的OOP惯用语,也不认为(B)任何与你类似的突出模式。而且(C),绝对精细。现在也许你应该这样做,也许你不应该这样做。每当你做一些你很难描述的事情时,你当然应该猜测自己,并想知道是否有更简单的方法。但是,缺乏用于描述模型的常用术语,并且它不适合您所听到的“模式”,本身并不表示存在问题。课程有时不得不做一些古怪的东西。这才是重点。如果你为这些类的消费者封装了很多复杂性,并且它直观,合乎逻辑且可以被发现,那就太棒了!
错误地使用常用术语试图帮助某人理解是错误的。事实上,你使用上面的术语 inherit 确实让我很困惑,而且我仍然不能100%肯定我拥有它。是这个吗?
ClassA类的对象维护ClassB对象的集合。此外,ClassA对象的某些功能不仅要对自己的ClassB对象起作用,还要对其他ClassA对象维护。为此,ClassA对象维护对其他ClassA对象的引用。
假设我当然正确,我认为这是一个很好的方式来描述它。而且由于这里确实没有继承,如果使用该术语,会使人们感到困惑。此外,如果您所做的事情与某些模式不匹配,请不要每次都感到苦恼。
答案 2 :(得分:0)
我认为你的模型有问题。如果一个类的两个或多个实例与另一个类的实例有关系,那么正确的模型不是让其中一个实例包含第三个 - 它是使它们都成为将引用到第三个。在人类父母的情况下,每个人都应该引用相同的“后代”(人类儿童名单)对象。然后,您可以通过引用计数等机制控制引用的类。
答案 3 :(得分:0)
OOP定义了两种基本类型的关系:
在第二类中,您有子类别:
前两个是相似的,但你的具体例子清楚地指的是第三个。父母不包含孩子,他们与孩子有关,当有人与家人结婚时,他们与现有家庭建立了新的关系(协会)。
所以我猜答案是否定的,没有“模式”。您只是将一组关系从一个实例复制/转换为另一个实例。