Files
RedHotRoast-ios/Assets/Scripts/Pool/ObjectPool/ObjectPool.cs
T
2026-04-22 09:52:55 +08:00

70 lines
1.5 KiB
C#

using System;
using System.Collections.Generic;
namespace FlowerPower
{
public class ObjectPool<T> where T : new()
{
private Stack<T> m_Stack = new();
private Action<T> m_ActionOnNew;
private Action<T> m_ActionOnGet;
private Action<T> m_ActionOnRelease;
public int CountAll { get; private set; }
public ObjectPool()
{
}
public ObjectPool(Action<T> actionOnGet, Action<T> actionOnRelease)
{
m_ActionOnGet = actionOnGet;
m_ActionOnRelease = actionOnRelease;
}
public T Get()
{
T element;
if (m_Stack.Count == 0)
{
element = new T();
CountAll++;
if (m_ActionOnNew != null)
{
m_ActionOnNew(element);
}
}
else
{
element = m_Stack.Pop();
}
if (m_ActionOnGet != null)
m_ActionOnGet(element);
return element;
}
public void Release(T element)
{
if (m_ActionOnRelease != null)
{
m_ActionOnRelease(element);
}
m_Stack.Push(element);
}
public void Dispose()
{
m_Stack.Clear();
m_Stack = null;
m_ActionOnNew = null;
m_ActionOnGet = null;
m_ActionOnRelease = null;
}
}
}