【问题标题】:Which pattern to use?使用哪种模式?
【发布时间】:2015-03-08 16:11:20
【问题描述】:

问题:

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

然后经常会出现对相同字段的更多格式的请求。

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

【问题讨论】:

标签: java pdf design-patterns plugins code-reuse


【解决方案1】:

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

首先创建一个名为 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;
    }

}

这是您可以使用上述类的方法:

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

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

【讨论】:

  • 感谢您的回答。所以这意味着每次有新格式请求时我都必须添加不同的格式化程序类?我可以动态输入格式模式并将其应用于特定字段吗?
  • 是的。您将需要创建不同的格式化程序类。例如,要将 word 中的数字转换为 int,请创建一个名为 WordsToNumber 的新格式化程序。要决定在运行时使用哪个格式化程序,您可以实现一个简单的工厂,在传递格式字符串时为您创建适当的格式化程序。
猜你喜欢
  • 1970-01-01
  • 2014-04-23
  • 1970-01-01
  • 1970-01-01
  • 2018-03-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-07-03
相关资源
最近更新 更多