Unity 简单的缓存池

using System;
using System.Collections.Generic;

public class ObjectPool<T> where T:class
{
   //堆栈
   private readonly Stack<T>  m_stack;
   //事件
   private readonly Func<T>   m_ActionOnCreate;
   private readonly Action<T> m_ActionOnGet;
   private readonly Action<T> m_ActionOnRelease;
   //构造函数
  public ObjectPool(Func<T> actionOnCreate, Action<T> actionOnGet, Action<T> actionOnRelease)
    {
            m_stack             = new Stack<T>();
            m_ActionOnCreate    = actionOnCreate;
            m_ActionOnGet       = actionOnGet;
            m_ActionOnRelease   = actionOnRelease;
     }
    //获取接口
    public T Get()
    {
          T obj;
          if(m_stack.Count == 0)
          {
             //执行构建操作
              obj = m_ActionOnCreate();
          }
          else 
           {
              obj = m_stack.Pop();
           }
           //执行回调
           if(m_AcitonOnGet != null)
           {
              m_ActionOnGet(obj);
            }
            return obj;
     }
     //释放接口
    public void Release(T obj)
    {
       if(m_ActionOnRelease != null)
       {
           m_ActionOnRelease(obj);
       }
       m_stack.Push(obj);
    }
    //clear接口
    public void Clear()
    {
       m_stack.Clear();
    }
}
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容