UMVCSL4——主面板View和Mediator
UMVCSL4——主面板View和Mediator
本章代码关键字
1 | Mediator //Mediator基类,任何在PureMVC内作为Mediator中介的类都应该继承该类,可以实现对其关联ViewUI界面的操作 |
View
即界面类,就是管理各个UI控件的类
1 | using UnityEngine; |
Mediator
界面中介类,类似于Model和Proxy之间的关系,Mediator负责处理界面逻辑
界面中介类有套路的写法
- 继承PureMVC中的
Mediator
脚本 - 写构造函数
- 重写要监听哪些通知的方法(重要)
- 重写监听到处理通知的方法(重要)
- 可选:重写注册时的方法
其中3,4步非常重要,前者决定要监听哪些通知名,后者决定监听到前者指定的通知后要做什么
-
继承PureMVC中的
Mediator
脚本1
public class NewMainViewMediator : Mediator { }
-
写构造函数
和Proxy一样,继承了
Mediator
的派生类需要声明构造函数并调用构造函数传入mediatorName
1
2
3
4
5
6//Mediator的构造函数在形式与作用上都与Proxy基类相似,这里不再多余阐述其用法
public Mediator(string mediatorName, object viewComponent = null)
{
MediatorName = mediatorName ?? NAME;
ViewComponent = viewComponent;
}因此,这里我们采用和Proxy构造函数差不多的写法
1
2
3
4
5
6
7
8
9
10//这里显式的将父类的NAME隐藏了,因此再调用NewMainViewMediator.NAME得到的将是这里的名字
public static new string NAME = "NewMainViewMediator";
// 2.写构造函数
public NewMainViewMediator() : base(NAME)
{
//这里面是可以去创建界面预设体等逻辑
//但是界面显示应该是被触发控制的
//而且创建界面的代码重复性比较高
} -
重写要监听哪些通知的方法(重要)
这是一个PureMVC的规则,就是你需要监听哪些通知,那就在这里把通知们通过字符串数组的形式返回出去
PureMVC就会帮助我们监听这些通知,类似于 通过事件名 注册事件监听简单来说,就是要监听哪些通知,该方法就返回哪些通知名
这里就会体现通知类的用处,要使用哪些通知就在通知类里声明一个字符串常量
1
2
3
4
5
6
7
8
9public override string[] ListNotificationInterests()
{
//这是一个PureMVC的规则
//就是你需要监听哪些通知,那就在这里吧通知们通过字符串数组的形式返回出去
//PureMVC就会帮助我们监听这些通知
//类似于 通过事件名 注册事件监听
return new string[] { PureNotification.UPDATE_PLAYER_INFO };
//如果要监听别的通知,就在字符串数组后面在添加通知名即可
} -
重写处理通知的方法
你在
ListNotificationInterests()
返回了哪些通知名,这里就可以执行监听到通知后执行的逻辑
该方法的参数是INotification
,该接口内有两个重要信息- 通知名 我们根据这个名字 来做对应的处理
- 通知包含的信息(类似于事件中心触发者发送给监听者的对象)
1
2
3
4
5
6
7
8
9
10
11
12
13
14// 4.重写处理通知的方法
public override void HandleNotification(INotification notification)
{
//INotification 对象 里面包含两个对我们来说 重要的参数
//1. 通知名 我们根据这个名字 来做对应的处理
//2. 通知包含的信息
switch (notification.Name)
{
//和上面的ListNotificationInterests返回的字符串对应,这里就是如果监听到对应字符串处理相应的逻辑
case PureNotification.UPDATE_PLAYER_INFO:
(ViewComponent as NewMainView).UpdateInfo(notification.Body as PlayerDataObject);
break;
}
} -
可选:重写注册时的方法
1
2
3
4
5public override void OnRegister()
{
base.OnRegister();
//注册时初始化一些内容
}
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 文KRIFE齐的博客!