From 941cbee0ad831618001f57fbfbde5001507040c0 Mon Sep 17 00:00:00 2001
From: GeWuYou <95328647+GeWuYou@users.noreply.github.com>
Date: Fri, 16 Jan 2026 08:26:52 +0800
Subject: [PATCH] =?UTF-8?q?feat(state):=20=E6=B7=BB=E5=8A=A0=E4=B8=8A?=
=?UTF-8?q?=E4=B8=8B=E6=96=87=E6=84=9F=E7=9F=A5=E7=8A=B6=E6=80=81=E5=9F=BA?=
=?UTF-8?q?=E7=B1=BB?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
- 实现了ContextAwareStateBase类,继承IState和IContextAware接口
- 提供状态进入、退出和转换的基础功能
- 添加架构上下文的设置和获取方法
- 支持状态转换规则的自定义实现
- 包含完整的XML文档注释
---
.../state/ContextAwareStateBase.cs | 65 +++++++++++++++++++
1 file changed, 65 insertions(+)
create mode 100644 GFramework.Core/state/ContextAwareStateBase.cs
diff --git a/GFramework.Core/state/ContextAwareStateBase.cs b/GFramework.Core/state/ContextAwareStateBase.cs
new file mode 100644
index 0000000..c0ca514
--- /dev/null
+++ b/GFramework.Core/state/ContextAwareStateBase.cs
@@ -0,0 +1,65 @@
+using GFramework.Core.Abstractions.architecture;
+using GFramework.Core.Abstractions.rule;
+using GFramework.Core.Abstractions.state;
+
+namespace GFramework.Core.state;
+
+///
+/// 上下文感知状态基类
+/// 提供基础的状态管理功能和架构上下文访问能力
+/// 实现了IState和IContextAware接口
+///
+public class ContextAwareStateBase : IState, IContextAware
+{
+ ///
+ /// 架构上下文引用,用于访问架构相关的服务和数据
+ ///
+ private IArchitectureContext? _context;
+
+ ///
+ /// 设置架构上下文
+ ///
+ /// 架构上下文实例
+ public void SetContext(IArchitectureContext context)
+ {
+ _context = context;
+ }
+
+ ///
+ /// 获取架构上下文
+ ///
+ /// 架构上下文实例
+ public IArchitectureContext GetContext()
+ {
+ return _context!;
+ }
+
+ ///
+ /// 进入状态时调用的方法
+ /// 子类可重写此方法以实现特定的状态进入逻辑
+ ///
+ /// 从哪个状态转换而来,可能为null表示初始状态
+ public virtual void OnEnter(IState? fromState)
+ {
+ }
+
+ ///
+ /// 退出状态时调用的方法
+ /// 子类可重写此方法以实现特定的状态退出逻辑
+ ///
+ /// 将要转换到的目标状态,可能为null表示结束状态
+ public virtual void OnExit(IState? toState)
+ {
+ }
+
+ ///
+ /// 判断当前状态是否可以转换到目标状态
+ /// 子类可重写此方法以实现自定义的状态转换规则
+ ///
+ /// 希望转换到的目标状态对象
+ /// 如果允许转换则返回true,否则返回false
+ public virtual bool CanTransitionTo(IState targetState)
+ {
+ return true;
+ }
+}
\ No newline at end of file