我正在编写MUD引擎,并且刚刚开始开发游戏对象模型,该模型需要可扩展。
我需要帮助的主要原因是,我所做的事情感觉很混乱,但是我想不出另一个效果更好的解决方案。
我有一个名为MudObject
的类,另一个名为Container
的类,一个容器可以包含多个MudObjects
,但是它本身是一个MudObject
,但是MudObject
需要知道它们所包含的内容。
所以他们看起来像这样:
public abstract class MudObject
{
Container containedBy;
}
public abstract class Container : MudObject
{
List<MudObject> Contains;
}
(请注意,这些只是示例,缺少一些限定符和访问修饰符,属性等)
现在,这本身似乎很混乱,但让我们添加其他内容:
Item
是一个MudObject
,所有视觉物品(例如武器)都将被继承,但是其中一些物品也必须是容器(例如箱子)。但是在c#中没有这样的多重继承,因此归结为接口,最好的选择是使容器成为一个接口(据我所知)。但是有一个我不想让它成为一个原因,就是在容器中添加MudObject
将导致容器更新MudObject
s .containedBy
值。有什么想法可以使这项工作奏效,还是我陷入使事情变得过于复杂的陷阱?
如果是这样,您还有什么建议?
最佳答案
您要的是合理的,就是Composite Design Pattern