项目记录21-- 原来c#框架mediator改lua--02

来源:互联网 发布:安卓全球电视直播软件 编辑:程序博客网 时间:2024/05/20 22:29

c#框架里面分Mediator和Module两个,但是在开发时候发现module这个只有注册mediator这功能,用lua重写把Mediator和Module合并。一个Mediator也代表Module.每个模块(Mediator)都是独立的通过过事件发送进行通信,实现解耦。为了能尽量接近以前quick-coco的开发,重新将quick源码开了一遍哪个是眼花啊,能用的还是有的。


实现BaseMediaotr.lua基类,以后所有的mediator(Module)都继承它(呵呵了,lua实现继承),MediatorManager.lua单例管理所有的Mediator。
直接上个LoginMediator.lua看看看实现继承,用过quick开发的估计感觉很很熟悉。


--[[
mediator:模块进行解耦
]]
local BaseMediator = class("BaseMediator")
local _Evevnts = nil
local _Notics = {}
--构造方法
function BaseMediator:ctor(mediatorName)
--设置c#层事件接口:使用c#事件不使用lua的,这样在c#,lua就可以通过发送事件模块通信
--减少使用最好只在Meditor(Module)需要通信时候用,View里面使用内部的机制
_Evevnts = luaBaseMediator.New(mediatorName) 
end


--子类重写:监听事件
function BaseMediator:Notification( )
return {}
end


--子类重写:监督事件处理
function BaseMediator.ProcessEvent(evt)
end


--注册监听
function BaseMediator:RegisterNotifications(tab)
_Notics = tab
for i=1,table.getn(_Notics) do
Notifier.Instance:RegisterEventListener(_Notics[i],_Evevnts)
end
end


--移除所有监听
function BaseMediator:RemoveAllNotifications( )
for i=1,table.getn(_Notics) do
Notifier.Instance:RemoveListener(_Notics[i],_Evevnts)
end
end
--离开
function BaseMediator:Exit( )
self:RemoveAllNotifications()
_Evevnts = nil
_Notics = nil
end


return BaseMediator

-------------------------------------------------------------------------------------------------



LoginMediator = class("LoginMediator",require("Base.BaseMediator"))


--构造函数
function LoginMediator:ctor( )
LoginMediator.super.ctor(self, "LoginMediator")
self:RegisterNotifications(self:Notification())
end


--监听事件
function LoginMediator:Notification( )
return {
LoginNotice.Show
}
end


--事件处理
function LoginMediator.ProcessEvent(evt)
print("LoginMediator--------- : " ..evt.EventType)

end


--mediator退出处理
function LoginMediator:Exit( )
--先调用父类的Exit
self.super:Exit()
end


return LoginMediator


--测试调用就可以实现这个模块了
1.MediatorManager:Instance():AddMediator(MediatorType.LoginMeditor,LoginNotice.Show)
2.发送消息LoginNotice.Show就可以接受到。


写完了Mediator类,接下来就要实现SceneManager,DataManager,UIManager等,打算在每个Mediator(Module)里面使用MVC进行.看电影去貌似很久没看了。



0 0
原创粉丝点击