Chinese, Simplified
category
在编程中,有无数种生成和使用数据的方法,我只想探讨我个人非常钟爱的两种。选择哪一种取决于你的具体需求。在这篇文章中,我将解释它们的适用场景和主要区别。
按需供应(Supply on Demand)
核心思想:
- 生产者/函数(Supplier/Function) 是 被动 的。
- 调用者/消费者(Caller/Consumer) 是 主动 的。
这是编程中最常见的数据供应方式。在这种设计模式中,当观察者提出需求时,生产者才会提供数据。实现这种方法非常简单,可以使用一个方法和一对受控循环来构建。当调用者准备好处理生成的值时,它会调用一个函数,该函数生成数据并将其返回给调用者。另一种稍微不同的方式是使用“生产者/消费者”(Supplier/Consumer)对:将一个消费者回调方法传递给生产者,然后当数据准备好时,生产者会用包含生成数据的参数来调用该消费者。但这两种方式的核心都是按需生成数据,由调用者/消费者来决定何时获取数据。
实现示例:
- Java 中的
Supplier/Function
接口 - HTTP API 实现
- 许多语言中的
Generators/Iterators
(生成器/迭代器)
当然,这种设计还有许多子类型,你需要根据自己的需求进行选择。我列举几个例子:
- 如果数据是有限的,必须有一个通用的控制机制来终止循环,例如当供应结束时返回一个 “null” 值。当然,这不总是适用,因为有时供应的数据本身就可能为 null。一个常见的方法是使用一个带有控制标志的封装对象来返回结果。
- 如果生产者函数在其逻辑内部调用了另一个生产者,最好将一个回调函数作为处理程序传递给它,用于消费迭代值。生产者会将这个消费者回调传递给其所依赖的其他生产者。
- 如果你的实现需要一个可以暂停和稍后恢复的循环,你可能需要一个变量来保存数据生成的下一步状态。每个生产者都必须将这个变量传递给其他递归的生产者。
关于这种设计的一些重要注意事项:
- 不要让调用者等待异步数据生成。如果数据尚未就绪,只需通知调用者即可。另外,由于其本质,将这种设计用于异步数据生成通常不是一个好主意。如果你必须实现异步数据生成,请参阅下一章节。
- 登录 发表评论
- 4 次浏览
发布日期
星期二, 九月 23, 2025 - 20:46
最后修改
星期二, 九月 23, 2025 - 20:53
Article
最新内容
- 1 day 18 hours ago
- 1 day 18 hours ago
- 2 days 4 hours ago
- 2 days 4 hours ago
- 2 days 4 hours ago
- 2 days 5 hours ago
- 2 days 5 hours ago
- 2 days 5 hours ago
- 2 days 5 hours ago
- 2 days 6 hours ago