实现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
相关产品推荐
相关产品推荐

