# puremvc **Repository Path**: CGzhao/puremvc ## Basic Information - **Project Name**: puremvc - **Description**: puremvc - **Primary Language**: C# - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2025-09-29 - **Last Updated**: 2025-12-02 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # Unity + PureMVC 小 Demo 说明 本项目展示了在 Unity 中使用 PureMVC 完成一次完整的 UI 交互流程:点击界面上的 `Random` 按钮后,通过 `Facade` 分发通知触发 `Command`,`Command` 调用 `Proxy` 更新数据,再由订阅通知的 `Mediator` 更新 UI 文本与滑条。 ## 功能概述 - 点击 `hpButton` 后触发 `RandomBtnClick` 通知。 - `HpCommand` 响应通知,调用 `HpProxy.RandomHp()` 生成 0–100 的随机 HP。 - `HpCommand` 发送 `HpChanged` 通知并携带最新 HP。 - `HpMediator` 订阅 `HpChanged`,更新 `hpText` 文本与 `hpSlider` 数值。 ## 核心角色 - `Facade`:应用总线,负责注册与分发通知、Command、Proxy、Mediator。 - `Command`:业务命令,收到通知时执行业务逻辑(本例中更新 HP 并转发通知)。 - `Proxy`:数据模型与数据访问层(本例中持有并生成随机 HP)。 - `Mediator`:界面层,订阅通知并更新 UI(本例中更新文本与滑条)。 ## 启动与注册 应用启动入口在 `ApplicationMgr.Start`,它会调用 `ApplicationFacade.StartUp()` 完成注册。 ```csharp // Assets/Scripts/Core/ApplicationMgr.cs public class ApplicationMgr : MonoBehaviour { void Start() { ApplicationFacade.Instance.StartUp(); } } ``` `ApplicationFacade` 负责注册 Command、Proxy、Mediator: ```csharp // Assets/Scripts/Core/ApplicationFacade.cs using PureMVC.Patterns.Facade; using UnityEngine; public class ApplicationFacade : Facade { public static readonly ApplicationFacade Instance = new ApplicationFacade(); public void StartUp() { RegisterCommds(); RegisterProxys(); RegisterMediators(); } private void RegisterCommds() { RegisterCommand("RandomBtnClick", () => new HpCommand()); } private void RegisterProxys() { RegisterProxy(new HpProxy("HpProxy")); } private void RegisterMediators() { var uiRoot = GameObject.FindGameObjectWithTag("UIRoot"); RegisterMediator(new HpBtnMediator("HpBtnMediator", uiRoot)); RegisterMediator(new HpMediator("HpMediator", uiRoot)); } } ``` ## 交互时序(点击按钮 → 更新数据 → 刷新 UI) 1. `HpBtnMediator` 在构造时找到 `hpButton` 并监听点击,点击后通过 `Facade` 发送 `RandomBtnClick` 通知。 2. `HpCommand` 被注册到 `RandomBtnClick`,执行时获取 `HpProxy` 并调用 `RandomHp()` 更新数据;随后再发送 `HpChanged` 通知并携带最新 HP。 3. `HpMediator` 订阅并处理 `HpChanged`,将文本更新为 `HP: <值>`,并将滑条设置为 `hp / 100f`。 ### 按钮 → 通知(Mediator 发起) ```csharp // Assets/Scripts/Core/HpBtnMediator.cs using PureMVC.Patterns.Mediator; using UnityEngine; using UnityEngine.UI; public class HpBtnMediator : Mediator { private Button _randomBtn; public HpBtnMediator(string mediatorName, object viewComponent = null) : base(mediatorName, viewComponent) { _randomBtn = ((GameObject)viewComponent).transform.Find("hpButton").GetComponent