使用哪种模式?

Which pattern to use?

问题:

我必须填写 PDF 表格。必须使用不同的值格式填写相同的字段。例如,可以有一个日期字段,如@today_date@ 或@today_date_in_words@。类似@number@ 或@number_in_words@.

然后经常会出现要求为相同字段提供更多格式的请求。

我的问题是,我能否使用某种模式来处理这个问题,这样我就不需要对代码进行大量更改,而只需插入新格式,它就会给我想要的结果。

令人惊讶的是,大多数设计问题都可以使用简单的抽象来解决。

首先创建一个名为 Formatter 的接口:

public interface Formatter<I,O> {
    public O format(I input);
}

然后创建用于将数字转换为单词的格式化程序的具体实现:

    public class NumberInWordsFormatter implements Formatter<Number,String> {

    @Override
    public String format(Number input) {
        String numberInWords = input.toString();
        //logic for converting a number to words
        return numberInWords;
    }

}

这就是你如何使用上面的 classes :

public class FormattingExamples {
    public static void main(String []args) {
        Formatter<Number,String> formatter = new NumberInWordsFormatter();
        String numberInWords = formatter.format(100);
        System.out.println(numberInWords);
    }
}

您可以创建一系列格式化程序并使用它们以不同的格式格式化您的字段。请注意,在当前示例中,我只是将数字转换为字符串并 return 它。您可以在格式化方法中实现读取数字并将其转换为单词的逻辑。另请注意,应将包含字段名称和值的 class 传递给格式化程序。如果您有任何问题,请告诉我。