下面是为模块化重新构造MessageFormat的草稿。
清理遗产
添加新接口Parser和Formatter
使Format从Parser和Formatter下降
在有意义的地方,将接受Format作为输入参数的API更改为接受Parser或Formatter
在有意义的地方,将Format子类(如NumberFormat)拆分为格式化程序和解析器,但保留旧类的委托。
添加TimeZoneParser和TimeZoneFormatter,将它们分开,这样我们就不必构建所有解析数据结构。
对于Java来说,它有点复杂:UFormat可能是Format、Parser和Formatter的后代
重新构造消息格式
对代码进行结构调整,以便当它在消息字符串中点击{0,XXX}时,它调用注册表来获取格式化程序(或解析程序)来处理XXX。
我们添加了API来注册格式化程序和解析器,就像我们已经拥有的其他注册表一样。
注册表连续调用带有XXX的注册工厂,直到找到匹配项。
如果没有匹配项,XXX由YYY(,ZZZ)?组成?,然后尝试实例化一个类MessageFormatFactory_YYY(其中YYY通过小写和修剪空白来清除)。例如,{0,Number,###.0}将导致MessageFormatRegister_Number的实例化。
如果实例化失败,我们会标记它,这样我们就不会再尝试了。
如果实例成功,则创建类并调用其register()方法。该方法调用注册API来添加格式化程序和/或解析器。
如果完成所有这些操作后,{0,XXX}没有匹配项,则返回错误。(或者,我们可以有一个默认行为的设置。)