lua开源测试框架busted源码学习(三)--中介者模式mediator.lua

本文深入解析lua开源测试框架busted中的mediator.lua,探讨其作为中介者模式实现的事件处理机制。通过介绍mediator.lua如何参照发布订阅模式,阐述channel和predicate的概念,以及在busted中的应用,如test、describe等标识符的回调函数。文章还分析了代码结构,包括私有和公共部分,以及Mediator类和相关元表方法。
摘要由CSDN通过智能技术生成

在busted源码core.lua中有这句

local mediator = require 'mediator'()

mediator.lua其实是busted调用了开源的代码mediator_lua,这个开源代码其实就是实现了一个中介者模式的事件处理机制。中介者模式使用一个中介对象来封装一系列对象之间的交互关系。中介者可以使各个对象之间不需要显示地复杂的调用,从而使耦合性降低,同时可以独立地改变对象之间的交互行为。个人认为中介者模式类似于消息传输中的订阅发布模式,消息的发布者不会将message发送给特定的接收者,而是发送给一个中介者,发送者不需要了解接收者的行为。同理订阅者可以接收自己感兴趣的消息,不需要了解发布者。

mediator.lua实现参照了发布订阅模式中的基于主题和基于内容的方式;这两种方式对应于代码中即channel和predicate概念,前者即将消息分为不同的主题(通道),后者基于内容,即只有当消息的属性或者内容匹配订阅者定义的约束条件时,才会触发消息的处理,也可以将两种方式混合。

channel = Channel('root'),  -----基于主题channel

if not callback.options.predicate or callback.options.predicate(...) then ---基于内容是否满足约束条件
     -- just take the first result and insert it into the result table
     local value, continue = callback.fn(...)

     if value then table.insert(result, value) end
     if not continue then return result end
 end
在busted源码中,如下:

busted.subscribe({ 'suite', 'reset' }, handler.baseSuiteReset, { priority = 1 }
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值