如何用UML表达java.time.LocalDate、DateTimeFormatter与String的关系?
如何用UML表达LocalDate、String与DateTimeFormatter的双向转换关系
当然可以用UML来清晰表达这三者的双向转换逻辑,不过得结合不同的UML图类型来兼顾静态结构和动态交互两个层面,下面具体说说:
1. 用类图展示静态结构与依赖关系
类图可以直观呈现三个类的方法签名以及它们之间的依赖:
- 首先画出
LocalDate类,标注关键方法:- 实例方法:
format(formatter: DateTimeFormatter): String - 静态方法:
parse(text: CharSequence): LocalDate(注意String是CharSequence的实现类,所以这个方法支持直接传入String) - 另外别忘了
parse的重载方法:parse(text: CharSequence, formatter: DateTimeFormatter): LocalDate,这是更常用的带自定义格式的转换方式
- 实例方法:
- 画出
DateTimeFormatter类,它作为format和重载parse方法的参数被LocalDate依赖 - 虽然
String是Java内置类,你可以选择简化不画,但如果要明确转换关系,也可以画出它,标注LocalDate对它的依赖(因为parse接收String,format返回String)
在类图里用依赖箭头(虚线箭头)表示:
LocalDate→DateTimeFormatter:表示LocalDate的方法需要使用DateTimeFormatterLocalDate→String:表示LocalDate的方法接收或返回String
这种方式能让阅读者一眼看到三个类之间的静态关联,以及转换方法的定义。
2. 用序列图展示动态转换流程
类图只能展示静态结构,没法体现“双向转换”的调用过程,这时候序列图就派上用场了:
从LocalDate到String的转换流程
调用者 → LocalDate实例: format(myFormatter)
LocalDate实例 → DateTimeFormatter: (内部使用格式化规则)
LocalDate实例 → 调用者: 返回格式化后的String
从String到LocalDate的转换流程
调用者 → LocalDate类: parse(dateString, myFormatter)
LocalDate类 → DateTimeFormatter: (内部解析字符串)
LocalDate类 → 调用者: 返回解析后的LocalDate实例
序列图能清晰展示每一步的调用主体、被调用对象以及返回结果,完美体现双向转换的动态逻辑。
总结
单独用类图或序列图都有局限,但两者结合就能完整表达三者的双向转换关系:类图负责展示“有哪些方法可以完成转换”,序列图负责展示“这些方法是怎么被调用完成转换的”。
内容的提问来源于stack exchange,提问作者Rui
相关产品推荐
相关产品推荐

