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

实现java.time中Temporal接口方法时采用了哪种设计模式?

聊聊Java java.time中Temporal接口的加减实现技巧

用过Java 8及以后版本日期时间API的朋友,应该对LocalDate、LocalTime、LocalDateTime这些常用类不陌生。它们都实现了Temporal接口中的plus(TemporalAmount amount)、minus(TemporalAmount amount)方法,而OpenJDK里的实现思路真的暗藏巧思,今天就拿LocalTime.plus(TemporalAmount amount)来拆解一下。

先看LocalTime.plus的核心实现:它并没有自己去编写各种时间单位的加减逻辑,而是直接调用了传入参数amount的addTo方法,核心代码就是:

(LocalTime) amountToAdd.addTo(this)

这种设计堪称“甩锅式”解耦——把具体的加减计算逻辑完全交给了TemporalAmount的实现类(比如Duration或者Period)来处理。

深入想一层:TemporalAmount的addTo方法本身就需要适配不同的Temporal实现类。比如Duration清楚知道如何给LocalTime添加时长,Period则明白怎么给LocalDate叠加日期周期。而LocalTime这类类只需要维护好自身的时间字段(时、分、秒、纳秒),并提供字段修改的能力就够了,不用去操心各种时间量的计算规则。

这种设计的优势很明显:后续如果新增了新的Temporal实现类,或者新的TemporalAmount类型,两边都不需要修改原有代码,完美契合开闭原则,不得不说OpenJDK的开发者们把面向对象的设计思想玩得很溜。

内容的提问来源于stack exchange,提问作者Rui

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.26 11:07:54