Files
Main/Assets/Plugins/References/FuncellBase/Container/CacheDataByCommand.cs
2025-01-25 04:38:09 +08:00

68 lines
1.6 KiB
C#

using System;
using System.Collections.Generic;
using System.Text;
namespace Thousandto.Core.Base
{
/// <summary>
/// 缓存数据 -- 根据外部控制决定是否更新缓存
/// </summary>
/// <typeparam name="T"></typeparam>
public class CacheDataByCommand<T> where T : UnityEngine.Object
{
public delegate T CacheDataByCommandMethod();
public delegate bool CacheDataDecision();
private CacheDataByCommandMethod _getMethod = null;
private CacheDataDecision _decision = null; // 缓存数据更新控制
private bool _cached = false;
private T _cacheData;
public CacheDataByCommand(CacheDataByCommandMethod getFunc, CacheDataDecision decisionFunc)
{
_getMethod = getFunc;
_decision = decisionFunc;
if (_getMethod != null)
{
_cacheData = _getMethod();
}
}
~CacheDataByCommand()
{
_getMethod = null;
_decision = null;
_cacheData = null;
}
public T GetCacheData()
{
if (_decision != null)
{
_cached = _decision();
}
if (!_cached)
{
_cached = true;
if (_getMethod != null)
{
_cacheData = _getMethod();
}
}
return _cacheData;
}
public void Release()
{
if (_cacheData != null)
{
_cacheData = null;
}
}
}
}