简洁版本:
我将如何创建一个对象池来存储从同一个基类派生的不同类型的类?
有关预期用法的示例,请参见下文。
长版:
我有一个类BaseComponent
,有许多派生类Child1Component
,例如Child2Component
.
我还有另一个对象表示这些组件的集合,它们的属性设置为特定值。我称之为 an EntityTemplate
,因为实体是由一组组件及其值定义的。
我想基于实体组件创建实体。为此,目前我得到了适当的EntityTemplate
,循环遍历它的不同组件并调用Clone
我在每个子类上定义的方法。我也在Copy
那里定义了一个方法,这可能很有用。
当实体过期时,我想将其组件添加到对象池中,然后当我接下来需要创建实体时,我将获取实体模板,并且对于每个组件,我将从池中获取相同类型的一个并将其属性设置为等于 中的属性EntityTemplate
,如下所示:
// What i want to do
var entityTemplate = GetTemplate("UniqueString");
var MyActualEntity = new Entity();
foreach(var componentTemplate in entityTemplate)
{
var actualComponent = MagicComponentPool
.GetComponentSameTypeAsParam(componentTemplate);
actualComponent.CopyFrom(componentTemplate);
MyActualEntity.Components.Add(actualComponent);
}