From 103792f178cb639edff6ef6f318d8f022f95efb5 Mon Sep 17 00:00:00 2001
From: GeWuYou <95328647+GeWuYou@users.noreply.github.com>
Date: Sat, 17 Jan 2026 13:08:55 +0800
Subject: [PATCH] =?UTF-8?q?feat(state):=20=E4=B8=BA=E7=8A=B6=E6=80=81?=
=?UTF-8?q?=E5=9F=BA=E7=B1=BB=E6=B7=BB=E5=8A=A0=E9=94=80=E6=AF=81=E5=8A=9F?=
=?UTF-8?q?=E8=83=BD=E6=94=AF=E6=8C=81?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
- 实现 IDisposable 接口以支持资源清理
- 添加 Destroy 方法用于状态销毁和资源释放
- 在状态机切换时调用 Destroy 替代 Dispose
- 允许子类重写 Destroy 方法执行特定清理操作
- 确保状态切换时正确释放相关资源
---
.../state/ContextAwareStateBase.cs | 23 +++++++++++++------
.../state/ContextAwareStateMachine.cs | 3 ++-
2 files changed, 18 insertions(+), 8 deletions(-)
diff --git a/GFramework.Core/state/ContextAwareStateBase.cs b/GFramework.Core/state/ContextAwareStateBase.cs
index c0ca514..7eecbe8 100644
--- a/GFramework.Core/state/ContextAwareStateBase.cs
+++ b/GFramework.Core/state/ContextAwareStateBase.cs
@@ -1,6 +1,7 @@
using GFramework.Core.Abstractions.architecture;
using GFramework.Core.Abstractions.rule;
using GFramework.Core.Abstractions.state;
+using IDisposable = GFramework.Core.Abstractions.lifecycle.IDisposable;
namespace GFramework.Core.state;
@@ -9,7 +10,7 @@ namespace GFramework.Core.state;
/// 提供基础的状态管理功能和架构上下文访问能力
/// 实现了IState和IContextAware接口
///
-public class ContextAwareStateBase : IState, IContextAware
+public class ContextAwareStateBase : IState, IContextAware, IDisposable
{
///
/// 架构上下文引用,用于访问架构相关的服务和数据
@@ -34,12 +35,20 @@ public class ContextAwareStateBase : IState, IContextAware
return _context!;
}
+ ///
+ /// 销毁当前状态,释放相关资源
+ /// 子类可重写此方法以执行特定的清理操作
+ ///
+ public virtual void Destroy()
+ {
+ }
+
///
/// 进入状态时调用的方法
/// 子类可重写此方法以实现特定的状态进入逻辑
///
- /// 从哪个状态转换而来,可能为null表示初始状态
- public virtual void OnEnter(IState? fromState)
+ /// 从哪个状态转换而来,可能为null表示初始状态
+ public virtual void OnEnter(IState? from)
{
}
@@ -47,8 +56,8 @@ public class ContextAwareStateBase : IState, IContextAware
/// 退出状态时调用的方法
/// 子类可重写此方法以实现特定的状态退出逻辑
///
- /// 将要转换到的目标状态,可能为null表示结束状态
- public virtual void OnExit(IState? toState)
+ /// 将要转换到的目标状态,可能为null表示结束状态
+ public virtual void OnExit(IState? to)
{
}
@@ -56,9 +65,9 @@ public class ContextAwareStateBase : IState, IContextAware
/// 判断当前状态是否可以转换到目标状态
/// 子类可重写此方法以实现自定义的状态转换规则
///
- /// 希望转换到的目标状态对象
+ /// 希望转换到的目标状态对象
/// 如果允许转换则返回true,否则返回false
- public virtual bool CanTransitionTo(IState targetState)
+ public virtual bool CanTransitionTo(IState target)
{
return true;
}
diff --git a/GFramework.Core/state/ContextAwareStateMachine.cs b/GFramework.Core/state/ContextAwareStateMachine.cs
index c385502..d47fef4 100644
--- a/GFramework.Core/state/ContextAwareStateMachine.cs
+++ b/GFramework.Core/state/ContextAwareStateMachine.cs
@@ -4,6 +4,7 @@ using GFramework.Core.Abstractions.rule;
using GFramework.Core.Abstractions.state;
using GFramework.Core.Abstractions.system;
using GFramework.Core.extensions;
+using IDisposable = GFramework.Core.Abstractions.lifecycle.IDisposable;
namespace GFramework.Core.state;
@@ -71,7 +72,7 @@ public class ContextAwareStateMachine : StateMachine, ISystem
// 清理所有状态
foreach (var state in States.Values.OfType())
{
- state.Dispose();
+ state.Destroy();
}
States.Clear();