You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何通过Domino式顺序操作列表管理Order对象?求优化方案

解决方案

核心是用Kotlin标准库的fold函数替代forEach,实现链式的结果传递,同时满足开闭原则。

代码实现

保持原接口不变

interface IOrderService {
    fun operation(order: Order): Order
}

修改doStuff函数

fun doStuff(order: Order): Order {
    // 用fold累积处理结果,每个服务的输出作为下一个服务的输入
    return orderServices.fold(order) { processedOrder, service ->
        service.operation(processedOrder)
    }
}

逻辑说明

  • fold是Kotlin集合的标准操作,接收初始值(这里是传入的原始Order)和一个累积函数
  • 每次迭代时,processedOrder是上一个服务处理后的结果,当前服务基于这个结果执行operation,返回新的Order作为下一次迭代的输入
  • 所有服务执行完成后,返回最终处理后的Order,完全还原了最初的链式调用逻辑

优势

  • 符合开闭原则:新增服务只需实现IOrderService并加入orderServices列表,无需修改doStuff函数的核心逻辑
  • 代码简洁:利用标准库函数实现,无需额外设计模式
  • 灵活扩展:可以通过调整orderServices列表的顺序、动态添加/移除服务,轻松控制处理流程

内容的提问来源于stack exchange,提问作者davide.ferrari

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.25 11:06:19