Unity PureMvc的简单使用

在Unity场景里 新建一个Text,Text_SisPlayNum,在新建一个按钮ButtonCount 。

//数据实体类(没有继承)
//功能:存储原始数据 ,属于 “模型层”
using System.Collections;
using System.Collections.Generic;
using UnityEngine;


public class MyData  {

    private int _level = 0;

    //玩家等级
    public int Level
    {
        get { return _level; }
        set { _level = value; }
    }
}
//数据代理类 (继承Proxy)
//功能:数据的操作 ,属于 “模型层”

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using PureMVC.Patterns;
public class DataProxy : Proxy {
    //声明本类的名称
    //new 覆盖了父类也有NAME属性
    public new const string NAME = "DataProxy";
    //引用实体类
    private MyData _MyData;

    //构造函数
    public DataProxy():base(NAME)
    {
        _MyData = new MyData();
    }

    /// 
    ///  增加玩家的等级
    /// 
    /// 增加的数量
    public void AddLevel(int addNumber)
    {
        //把参数累加到 “实体类” 中
        _MyData.Level += addNumber;

        //把变化的数据发送给视图层
        SendNotification("Msg_AddLevel", _MyData);//参数: 消息名称,消息内容
    }

 

}

 


//视图展示
// 显示玩家UI页面, 属于“视图层”
using PureMVC.Interfaces;
using PureMVC.Patterns;
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;

public class DataMediator : Mediator {
    //定义本类名称
    public new const string NAME = "DataMediator";

    //定义两个显示控件
    private Text TxtLevel;               //显示等级
    private Button BtnDisplayNumber;     //点击的按钮

    /// 
    /// 构造函数
    /// 
    /// 界面UI的根结点
    public DataMediator(GameObject goRoodNode)
    {
        //确定控件
        TxtLevel = goRoodNode.transform.Find("Text_SisPlayNum").gameObject.GetComponent();
        BtnDisplayNumber = goRoodNode.transform.Find("ButtonCount").gameObject.GetComponent

 

//数据控制类
// 属于 “控制层”,接收玩家输入(或者视图层发来的消息),进行处理
using PureMVC.Interfaces;
using PureMVC.Patterns;
using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class DataCommand : SimpleCommand {


    //DataMediator.OnClickAddingLevelNumber 按钮事件发消息
    /// 
    /// 视图层发送消息,这里会执行方法
    /// 
    /// 
    public override void Execute(INotification notification)
    {   

      // switch (notification.Name)
       // {
          //  case "Reg_StartDataCommand":
                //视图层发消息过来的时候,
                //调用数据层的“增加等级”的方法 
                //RetrieveProxy 查找代理类
                DataProxy datapro = (DataProxy)Facade.RetrieveProxy(DataProxy.NAME);
                datapro.AddLevel(10);
          //  break;
         //   default:
        //   break;
       // }
    }


}

 

//PMVC 项目控制类(全局管理类)

using PureMVC.Patterns;
using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class ApplicationFacade : Facade {

    /// 
    /// 构造函数
    /// 
    /// 
    public ApplicationFacade(GameObject goRootNode)
    {
        //MVC 三层的关联绑定,建立绑定
        //控制层注册("命令消息"与控制层类的对应关系)
        //其他层发送消息 Reg_StartDataCommand ,就能执行命令层里面的Execute方法
        //一个命令消息 对应 一个Commad类(继承SimpleCommand)
        RegisterCommand("Reg_StartDataCommand", typeof(DataCommand));
        //视图层注册
        RegisterMediator(new DataMediator(goRootNode));
        //模型层注册
        RegisterProxy(new DataProxy());

    }



}

StartGame放在Canvas上, 启动PureMvc框架

//游戏的开始
//游戏项目的入口

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class StartGame : MonoBehaviour {

	// Use this for initialization
	void Start () {
		//启动PureMVC框架
		//this.gameObject 是UI界面的根结点
		new ApplicationFacade(this.gameObject);
	}
	
	
}

 

PureMVC架构中存在两种不同类型的消息:“命令绑定”类型消息 和 “通讯消息”。

当按钮被按下的时候,视图层(DataMediator)里的 按钮绑定事件 发送消息给 控制层(DataCommand)来

处理玩家输入(或者视图层发来的消息),控制层会根据“命令”消息 [Reg_StartDataCommand] 绑定的对应类 [DataCommand],来自动调用类里面的Execute 方法,然后查找 数据代理(操作)类 (模型层 ),获得数据操作类对象,调用其数据操作函数来对数据操作,数据操作类(模型层 )发送“通讯消息”[Msg_AddLevel]  给视图层,视图层收到消息通过HandleNotification方法

来更新UI数据 【TxtLevel.text 】。

 

PureMvc 流程
视图层  命令绑定通知(SendNotification) 控制层
控制层 方法调用(Facade.RetrieveProxy()) 模型层 (对数据修改)
模型层 消息通知(SendNotification) 视图层 (更新数据显示)

 

你可能感兴趣的:(unity)