UMVCSL6——Facade和Command
UMVCSL6——Facade和Command
本章代码关键字
1 | Facade //Facade基类,任何在PureMVC内作为Facade的类都应该继承该类,可以实现对PureMVC内框架下所有对象的管理 |
Facade
Facade是PureMVC非常重要的内容,它管理了PureMVC框架下的Model,View,Controller对象
而在Model,View,Controller对象之下,就是各个Proxy,Mediator,Command的,因此可以说Facade是PureMVC的总管理者
Facade也有套路写法
- 继承PureMVC中的Facade脚本
- 为了方便使用Facade 我们需要自己写一个单例模式的属性
- 初始化 控制层相关的内容
- 必须定义一个启动函数
第一步:项目里作为架构内Facade的类需要继承Facade
基类
1 | public class GameFacade : Facade { } |
第二步:其次,我们需要自己写一个单例模式的属性,
在Facade
基类的定义里,已经声明了一个instance
对象,
但由于基类内的GetInstance
方法需要传入Func<IFacade>
参数(用于初始化对象),且返回的是IFacade
因此实现自己的调用单例的属性更好
Facade
基类内的GetInstance
方法和instance
对象:
1 | public class Facade : IFacade |
自己实现的调用单例的属性:
1 | sing PureMVC.Patterns.Facade; |
在Facade内,有这三个成员变量
1 | public class Facade : IFacade |
而PureMVC的Model
,View
,Controller
都继承了各自的接口,Facade就通过这三个接口成员变量管理Model,View,Controller对象
1 | public class Controller: IController { } |
在Facade
基类内,有很多方法,其中有的方法我们必须要用
例如第三步的重写InitializeController()
初始化控制层方法,其实也有InitializeModel()
和InitializeView()
的方法
而游戏启动,初始化控制层内容是必不可少的,所以我们必须要重写InitializeController()
1 | //3.初始化 控制层相关的内容 |
通知我们已经知道就是字符串,通过字符串来让Mediator来监听并触发执行方法
但是命令(即command)我们这里还不知道,我们需要先需要先写一个命令(command)
同时,我们需要在写一个与该命令对应的通知名
1 | public class PureNotification |
现在有了命令与通知,就需要进行注册绑定了
使用RegisterCommand()
方法,传入通知字符串和一个返回Icommand
对象的方法(也就是返回要执行的命令类对象)
1 | protected override void InitializeController() |
完成这次绑定后,只要以后发送了注册时传入的通知,就会执行与之绑定的命名类的执行函数Execute()
第四步:我们必须在Facade
类里自己定义一个启动函数
我们需要调用SendNotification()
来发送通知,发送在第三步的RegisterCommand()
里绑定命令的通知,就会执行其绑定的Command
的Execute()
1 | //4.必须定义一个启动函数 |
之后,在其他类执行GameFacade.Instance.StartUp();
即可发现其执行了StartUpCommand
的Execute()
方法
以上即Facade和Command的简单使用方法,这是非常重要的知识,我们通过这些知识将PureMVC内的一切串联起来
1 | using PureMVC.Patterns.Facade; |
Command
Command即命令类,被执行时,就会执行其内部的Execute
方法
Command类的套路写法很简单
- 继承Command相关的基类,这里就一个命令,因此继承
SimpleCommand
基类 - 重写里面的执行函数
1 | using PureMVC.Interfaces; |
这个Execute()
方法的参数,很明显是和在Mediator
内的ListNotificationInterests()的参数是一样的类型,而该参数类型包含两个重要信息
- 通知名 我们根据这个名字 来做对应的处理
- 通知包含的信息(类似于事件中心触发者发送给监听者的对象)