23.PureMVC的主面板View和Mediator

23.PureMVC框架-主面板View界面层和Mediator中介者模式


23.1 知识点

查看界面层示意图,界面会交给一个中介者进行管理

创建 NewMainView 脚本代表主面板界面层。挂载到预制体上关联对象。定义控件变量并按照 MVC 的思想提供更新方法。如果是用 MVP 的思想就在不耦合数据对象就行。

public class NewMainView : MonoBehaviour
{
    // 找控件
    public Button btnRole;
    public Button btnSill;

    public Text txtName;
    public Text txtLev;
    public Text txtMoney;
    public Text txtGem;
    public Text txtPower;

    // 提供面板更新的相关方法给外部
    // 按照 MVC 的思想可以直接在这里提供更新的方法
    // 如果是用 MVP 的思想就在逻辑层改就好
    public void UpdateInfo(PlayerDataObj data)
    {
        txtName.text = data.playerName;
        txtLev.text = "LV." + data.lev;
        txtMoney.text = data.money.ToString();
        txtGem.text = data.gem.ToString();
        txtPower.text = data.power.ToString();
    }
}

创建主面板中介者脚本,继承 PureMVC 中的 Mediator 脚本。

// 继承 PureMVC 中的 Mediator 脚本
public class NewMainViewMediator : Mediator
{
}

重新定义名字并重写构造函数。初始化界面的工作可以写在构造函数,但是由于我们这里是触发响应不写在这。

// 写构造函数
public static new string NAME = "NewMainViewMediator";

public NewMainViewMediator() : base(NewMainViewMediator.NAME)
{
    // 这里面可以去创建界面预设体等等的逻辑
    // 但是界面显示应该是触发的控制的,比如按键按下或者点击按钮
    // 而且创建界面的代码重复性比较高,之后在别的地方写
}

重写监听通知方法。返回字符串数组,这个字符串数组意味着这个界面关心这个字符串数组中的通知。字符串数组中添加玩家通知字符串常量。

// 重写监听通知的方法
public override string[] ListNotificationInterests()
{
    // 这是一个 PureMVC 的规则
    // 就是你需要监听哪些通知,那就在这里把通知们通过字符串数组的形式返回出去
    // PureMVC 就会帮助我们监听这些通知
    // 类似于通过事件名注册事件监听
    return new string[]{
        PureNotification.UPDATE_PLAYER_INFO,
    };
}

重写处理通知方法。根据传进来的通知名分支判断事件进行什么回调处理。可以得到通知信息的 Body 作为参数。

// 重写处理通知的方法
public override void HandleNotification(INotification notification)
{
    // INotification 对象里面包含两个我们来说重要的参数
    // 1. 通知名 notification.Name 我们根据这个名字来做对应的处理
    // 2. 通知包含的信息 notification.Body 可以理解为通知参数,可以进行 as 转换

    // ViewComponent 代表着实际面板对象
    switch (notification.Name)
    {
        case PureNotification.UPDATE_PLAYER_INFO:
            // 收到更新通知的时候做处理
            if (ViewComponent != null)
            {
                (ViewComponent as NewMainView).UpdateInfo(notification.Body as PlayerDataObj);
            }
            break;
    }
}

可以重写注册方法初始化一些内容。

// 可选:重写注册时的方法
public override void OnRegister()
{
    base.OnRegister();
    // 初始化一些内容
}

ViewComponent 是界面对象,之后串联的时候会处理设置 ViewComponent 相关。


23.2 知识点代码

NewMainView

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

public class NewMainView : MonoBehaviour
{
    //1.找控件
    public Button btnRole;
    public Button btnSill;

    public Text txtName;
    public Text txtLev;
    public Text txtMoney;
    public Text txtGem;
    public Text txtPower;


    //2.提供面板更新的相关方法给外部
    //按照MVC的思想 可以直接在这里提供 更新的方法
    //如果是用MVP的思想 就在逻辑层改就好
    public void UpdateInfo(PlayerDataObj data)
    {
        txtName.text = data.playerName;
        txtLev.text = "LV." + data.lev;
        txtMoney.text = data.money.ToString();
        txtGem.text = data.gem.ToString();
        txtPower.text = data.power.ToString();
    }
}

NewMainViewMediator

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

//套路写法

//1.继承PureMVC中的Mediator脚本 
public class NewMainViewMediator : Mediator
{

    //2.写构造函数
    public static new string NAME = "NewMainViewMediator";

    public NewMainViewMediator() : base(NewMainViewMediator.NAME)
    {
        //这里面可以去创建界面预设体等等的逻辑
        //但是界面显示应该是触发的控制的 比如按键按下或者点击按钮
        //而且创建界面的代码 重复性比较高 之后在别的地方写
    }

    //3.重写监听通知的方法
    public override string[] ListNotificationInterests()
    {
        //这是一个PureMVC的规则
        //就是你需要监听哪些通知 那就在这里把通知们通过字符串数组的形式返回出去
        //PureMVC就会帮助我们监听这些通知 
        // 类似于 通过事件名 注册事件监听
        return new string[]{
            PureNotification.UPDATE_PLAYER_INFO,
        };
    }

    //4.重写处理通知的方法
    public override void HandleNotification(INotification notification)
    {
        //INotification 对象 里面包含两个队我们来说 重要的参数
        //1.通知名 notification.Name 我们根据这个名字 来做对应的处理
        //2.通知包含的信息 notification.Body 可以理解为通知参数 可以进行as转换

        //ViewComponent代表着实际面板对象
        switch (notification.Name)
        {
            case PureNotification.UPDATE_PLAYER_INFO:
                //收到 更新通知的时候 做处理 
                if (ViewComponent != null)
                {
                    (ViewComponent as NewMainView).UpdateInfo(notification.Body as PlayerDataObj);
                }
                break;
        }
    }

    //5.可选:重写注册时的方法
    public override void OnRegister()
    {
        base.OnRegister();
        //初始化一些内容
    }
}


转载请注明来源,欢迎对文章中的引用来源进行考证,欢迎指出任何有错误或不够清晰的表达。可以在下面评论区评论,也可以邮件至 785293209@qq.com

×

喜欢就点赞,疼爱就打赏