消息格式

下面是为模块化重新构造MessageFormat的草稿。

清理遗产

    1. 添加新接口Parser和Formatter

    2. 使Format从Parser和Formatter下降

    3. 在有意义的地方,将接受Format作为输入参数的API更改为接受Parser或Formatter

    4. 在有意义的地方,将Format子类(如NumberFormat)拆分为格式化程序和解析器,但保留旧类的委托。

    5. 添加TimeZoneParser和TimeZoneFormatter,将它们分开,这样我们就不必构建所有解析数据结构。

    6. 对于Java来说,它有点复杂:UFormat可能是Format、Parser和Formatter的后代

重新构造消息格式

    1. 对代码进行结构调整,以便当它在消息字符串中点击{0,XXX}时,它调用注册表来获取格式化程序(或解析程序)来处理XXX。

    2. 我们添加了API来注册格式化程序和解析器,就像我们已经拥有的其他注册表一样。

    3. 注册表连续调用带有XXX的注册工厂,直到找到匹配项。

    4. 如果没有匹配项,XXX由YYY(,ZZZ)?组成?,然后尝试实例化一个类MessageFormatFactory_YYY(其中YYY通过小写和修剪空白来清除)。例如,{0,Number,###.0}将导致MessageFormatRegister_Number的实例化。

    5. 如果实例化失败,我们会标记它,这样我们就不会再尝试了。

    6. 如果实例成功,则创建类并调用其register()方法。该方法调用注册API来添加格式化程序和/或解析器。

    7. 如果完成所有这些操作后,{0,XXX}没有匹配项,则返回错误。(或者,我们可以有一个默认行为的设置。)