GeWuYou 760cc71985 feat(ui): 实现UI实例池化管理和生命周期优化
- 添加UI实例管理策略枚举(AlwaysCreate、Reuse、Pooled)
- 在GodotUiFactory中实现缓存池和实例回收机制
- 扩展IUiFactory接口支持预加载、回收和缓存管理功能
- 更新UiRouterBase支持实例策略参数传递
- 重构Pop策略将Hide重命名为Cache以明确语义
- 移除项目文件中的冗余文件夹引用
- 添加日志记录便于调试和监控实例状态
- 实现批量预加载和全量缓存清理功能
- 优化页面替换逻辑支持实例复用和池化管理
2026-01-20 08:32:53 +08:00

55 lines
1.5 KiB
C#
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

using GFramework.Core.Abstractions.utility;
namespace GFramework.Game.Abstractions.ui;
/// <summary>
/// UI工厂接口用于创建UI页面实例
/// </summary>
public interface IUiFactory : IContextUtility
{
/// <summary>
/// 创建或获取UI页面实例
/// </summary>
/// <param name="uiKey">UI标识键</param>
/// <param name="policy">实例管理策略</param>
/// <returns>UI页面实例</returns>
IUiPageBehavior GetOrCreate(string uiKey, UiInstancePolicy policy = UiInstancePolicy.AlwaysCreate);
/// <summary>
/// 仅创建新实例(不使用缓存)
/// </summary>
IUiPageBehavior Create(string uiKey);
/// <summary>
/// 预加载UI资源到缓存池
/// </summary>
/// <param name="uiKey">UI标识键</param>
/// <param name="count">预加载数量默认1个</param>
void Preload(string uiKey, int count = 1);
/// <summary>
/// 批量预加载
/// </summary>
void PreloadBatch(params string[] uiKeys);
/// <summary>
/// 回收实例到缓存池
/// </summary>
/// <param name="page">要回收的页面实例</param>
void Recycle(IUiPageBehavior page);
/// <summary>
/// 清理指定UI的缓存实例
/// </summary>
void ClearCache(string uiKey);
/// <summary>
/// 清理所有缓存
/// </summary>
void ClearAllCache();
/// <summary>
/// 检查是否有缓存的实例
/// </summary>
bool HasCached(string uiKey);
}