一条申请(行会资金拨付)要过三级审批:舵初审、堂复审、会长终审——if 嵌套写死层级后,插入一级审批要改整条链。职责链模式把每级审批做成链上节点:每个节点处理后决定通过交下一级或就地驳回,链条的组成在装配时决定——插入、删除、调序都只动装配代码,不动任何一级审批的逻辑。
链式装配。示例代码如下:
local function buildChain(handlers)
return function(request)
for _, h in ipairs(handlers) do
local ok, reason = h(request)
if not ok then
return false, reason
end
end
return true, "全部通过"
end
end
资金审批接线。示例代码如下:
local chain = buildChain({
function(r) return r.gongxian >= 500, "帮贡不足500" end,
function(r) return r.amount <= 50000, "超出单笔上限" end,
function(r) return r.purpose ~= "", "用途必填" end
})
print(chain({ gongxian = 800, amount = 30000, purpose = "采购箭矢" }))
三级审批串成一条链,任一级驳回即终止并带原因——插入第四级审批只是在表里加一个函数。
嵌套 if 版与链式版的运行成本同为线性(每级判断一次),1000 次申请两者都在 0.2 毫秒级——收益不在速度在结构:新增审批层级,嵌套版改 N 处缩进,链式版加一行。
三个不适用场景:一是审批只有一级,单函数直接判断;二是各级审批需要共享大量中间状态,链上传递的 request 要膨胀成大对象;三是需要任一级通过即终止的或逻辑(与链的与语义相反),要改遍历策略,不能硬套。
全站技术干货持续更新:996 引擎 / Lua 实战帖,语法、参数与示例一篇讲透。进入文章地图 · 查看全部 →
【语法】 一、隐蔽陷阱 打印 5 层星号金字塔,每层比上层多 2 颗星、左侧空格少 1 个——空格与星数的数量关系不清晰时,…
【游戏】 一、业务场景 帮会下午没活动,成员上线点个卯就走。狩猎场上线:每晚 8 点开门 30 分钟,场内刷固定猎物,猎杀计…
【游戏】 一、业务场景 帮战开打才发现帮会没有物资储备,临时收捐谁也不交。粮仓上线:平日捐粮入库记账,帮战期间按配给开仓领补…
【语法】 一、隐蔽陷阱 验证"任一整数的立方都能写成连续奇数之和"时,起点从 1 开始逐个试,n 稍大就长跑几百步还没对上—…
【游戏】 一、业务场景 帮会大厅一面空墙,有人提议留言,结果聊天区刷屏根本留不住。题字墙上线:花 100 帮贡刻一句题字永久…
【游戏】 一、业务场景 灯谜活动上线半小时谜底被解题工具全数搜出——谜面与谜底同放在一份客户端配置里,读表即得。服务端重构:…