utility pipes

 问题描述:进入主程序,点击登录按钮,加载登录模块;登录成功通知主应用程序登录成功移除登录模块。发送通知竟然没有响应。

解决方法:利用工具utility pipes。

使用puremvc多核版进行项目开发,难免碰到模块之间,模块与主程序之间的通信!如何通信成了一个问题。Cliff Hall是该工具的作者!utility pipes可以构建在现有程序之上,通过加上管道(pipes)和节点控制器实现通信。具体是利用节点控制器发送信息(message)到指定的管道,另一端的节点控制器收取指定的信息(message)类型而实现的,管道是单向的,好比我们的自来水管道一样,因此,要实现模块间或者应用程序模块之间的互通信则必须最少要定义两根管道,四个节点控制器!什么是节点控制器?节点控制器是junctionMediator,负责处理流进的消息和负责发送流出的消息(由sendMessage函数实现消息发送),同时它还必须与其它视图管理器mediator进行交互获得流出的消息和输出收到的消息!那在哪里注册管道和何时注册以及定义管道类型?管道类型应该抽取出来独立为一个类进行管理,而注册管道则是双方模块都被加载的时候在主应用程序视图管理器里面注册.顺便说一下,使用多核版的,很容易涉及到了内存泄漏问题!有时候内存占用狂飙,因此要管理好内存的释放,当模块不再使用的时候应移除注册的东东.好了,咱们看看例子.

首先定义好两个模块,并且在页面上面有两个两个模块加载器利用这两个模块加载器各自加载一个模块,加载完一个发送消息给另外一个,收到以后显示消息,后者也可以发送消息给前者,前者收到消息也显示出来.

这样必须就有两根不同类型的管道,咱们给抽取出来:

再定义好一个接口,它继承自Ipipeware,我们必须实现里面的两个方法acceptOutputPipe和acceptInputPipe。它将被模块实现并且在注册管道的时候被调用,发送通知。

上面的两个类都放在同一文件夹common里面。

主应用程序里面应该定义好什么东西?包括某些常量以及方法,组件。

在启动命令里面,我们都是先注册mainMediator再注册junctionMediator,那是因为后者有可能调用调用前者,倘若前者后注册,势必引起空指针异常!

mainMediator里面应该侦听来自主界面的消息,同时做出响应发送消息至junctionMediator与之交互!

junctionMediator长得什么样是时候来看看它的庐山真面目了:

可以看到它也是一个mediator,使用报体进行通信,它仅关心模块是否被加载,当模块被加载完成之后便创建管道和链接管道!

看看模块的的junctionMediator是应该如何写?应该记住两点:一是它必须具备发送消息和接收消息的功能;二是它应该必须与模块的mediator进行交互完成消息的交换!与其它地方有点差异的是消息的处理是使用了getType()方法而非getName()方法。

 

模块midiator的代码:

基本原理就是这样子,通过管道进行消息通信,说难不难,说易也不易,比较繁琐,上面的代码并不能够直接运行,希望有心者还是动动手,动动脑实践一下,毕竟知识的掌握是要靠自己的!

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值