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