PureMVC 简单案例

链接: https://pan.baidu.com/s/1VPjIzLCOePnSL9r9kkLWWg 提取码: i9sj

01:MVC的定义
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
02:下载安装PureMVC
在这里插入图片描述
1.Proxy(代理) 相当于经典MVC中的Model.它将代理Model的所有职权。负责维护和操作应用程序的数据模型。Proxy通常情况下会暴露一组公共API供Controller(command)或View(mediator)调用,以获取、修改或更新程序数据。注意Proxy只可以发送通知,不可以也不应该让它接收通知。
2. Mediator(中介) 对应MVC中的View.它接管了View的所有职权,负责数据内容的视图呈现和捕获用户输入。Mediator管理者View Component, Mediator可以监听View Component发出的Event,它通过这些事件监听捕获用户输入。Mediator可以接收或发送通知,以跟Controller(Command)或其他Mediator交流。Mediator用于Model(Proxy)对外暴露的公共API操控Model(Proxy);
3. Command(命令)。它相当于一个指挥部,负责协调调度PureMVC中的Proxy和Mediator以转发通知。Command以接收或发送通知的方式跟View(Mediator)或其他Command通信,用Model(Proxy)暴露的公共API操控Model(Proxy).
4. Façade(经纪人) 在PureMVC中,M、V、C都是被作为单例封装在Façade类中的,他们对外不可见。在使用PureMVC框架的时候,不需要去创建Model、View和Controller,只需要创建一个Façade的单例,它就会自动创建出M、V、C这三个核心模块,并且为他们建立起通信机制。我们只要调用Façade暴露出来的公共方法就可以启动整个程序,所有的消息流转都在Façade内部完成。
5. View Component 是PureMvc框架中真正的可视元素,例如一个影片剪辑或一个按钮等。它通过事件与Mediator交流。通过向外暴露的API供Mediator操作。
6. Data Object 是PureMVC框架中真正的数据,它可以是一个数值对象、一个集合或是一个数据库。它通过Proxy的构造函数传入Proxy,并被一个名为data的属性引用。
03:创建脚本在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
MyDate 模型层

/****************************************************
	功能:模型类 存储原始数据
*****************************************************/

using UnityEngine;

public class MyDate
{
    private int _level = 0;

    public int Level
    {
        get
        {
            return _level;
        }

        set
        {
            _level = value;
        }
    }
}

DataProxy 模型代理类

/****************************************************
	功能:模型代理类 数据操作
*****************************************************/

using PureMVC.Patterns;
using UnityEngine;

public class DataProxy : Proxy
{
    //覆盖父类的字段
    public new const string NAME = "DataProxy";
    private MyDate _myDate = null;

    public DataProxy():base(NAME)
    {
        _myDate=new MyDate();
    }

    //增加的方法
    public void AddLevel(int number=1)
    {
        _myDate.Level += number;
        //数据发送给视图层
        SendNotification("MsgAddLevel",_myDate);
    }


}

DataMediator 视图层

/****************************************************
	功能:视图类 显示
*****************************************************/

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

public class DataMediator : Mediator
{
    public new const string NAME = "DataMediator";

    private Text text;
    private Button button;

    public DataMediator(GameObject root)
    {
        text = root.transform.Find("Text").GetComponent<Text>();
        button= root.transform.Find("Button").GetComponent<Button>();
        button.onClick.AddListener(() =>
        {
            //向控制层发送消息
            //发送点击事件
            SendNotification("RegCommand");
        });
    }

    //容许接收消息
    public override IList<string> ListNotificationInterests()
    {
        IList<string> list=new List<string>();
        //接收模型层的数据
        list.Add("MsgAddLevel");
        return list;
    }

    //处理数据
    public override void HandleNotification(INotification notification)
    {
        switch (notification.Name)
        {
            case "MsgAddLevel":
                MyDate date=notification.Body as MyDate;
                text.text = date.Level.ToString();
                break;
        }
    }
}

DataCommand 控制层

/****************************************************
	功能: 控制类
*****************************************************/

using PureMVC.Interfaces;
using PureMVC.Patterns;
using UnityEngine;

public class DataCommand : SimpleCommand
{

    //执行方法
    public override void Execute(INotification notification)
    {
        //获取代理;
        DataProxy proxy=(DataProxy)Facade.RetrieveProxy(DataProxy.NAME);
        proxy.AddLevel(10);
    }
}

ApplicationFacade 全局管理类

/****************************************************
	功能:全局管理类
*****************************************************/

using PureMVC.Patterns;
using UnityEngine;

public class ApplicationFacade : Facade
{
    public ApplicationFacade(GameObject root)
    {
        //关联三个层
        RegisterCommand("RegCommand",typeof(DataCommand));
        RegisterMediator(new DataMediator(root));
        RegisterProxy(new DataProxy());
    }
}

挂载到Canvas上

/****************************************************
	功能:开始游戏
*****************************************************/

using UnityEngine;

public class StartGame : MonoBehaviour 
{

    private void Start()
    {
        new ApplicationFacade(this.gameObject);
    }

}

在这里插入图片描述
在这里插入图片描述
PureMVC框架机制
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值