У вас может быть стек для каждого типа объектов, которые вы хотите объединить. В вашем случае это будет 3 стека. Затем в вашем методе Get get get, у вас будет логика, чтобы определить, какой пул следует использовать для получения соответствующего объекта. Я делаю это, передавая параметр методу Get, но это зависит от конкретной реализации.
public IType Get(int type)
{
switch (type)
{
case 1:
if (pool1.Count == 0)
{
return new MyObject1();
}
else
{
return pool1.Pop();
}
break;
case 2:
if (pool2.Count == 0)
{
return new MyObject2();
}
else
{
return pool2.Pop();
}
break;
case 3:
if (pool3.Count == 0)
{
return new MyObject3();
}
else
{
return pool3.Pop();
}
break;
}
}
В свободном методе, вы можете иметь If ... Else, как это:
public void Free(IType obj)
{
if (obj is MyObject1)
{
if (pool1.Count < MAX_POOL_SIZE)
pool1.Push(obj);
}
else if (obj is MyObject2)
{
if (pool2.Count < MAX_POOL_SIZE)
pool2.Push(obj);
}
else if (obj is MyObject2)
{
if (pool3.Count < MAX_POOL_SIZE)
pool3.Push(obj);
}
}
В идеале, у вас есть контроль над классом объектов, объединил. В этом случае вы добавляете к ним свойства, которые явно указывали бы их истинный тип, а затем в вашем методе Free вы использовали бы свою логику для этого свойства вместо того, чтобы использовать отражение. Это даст вам лучшую производительность.
И каков ваш вопрос? – Blorgbeard
где вопрос? – user492238
У вас могут быть разные типы с общим интерфейсом и использование очереди этого типа интерфейса. – Filburt