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