java - 使用哪种模式?

标签 java pdf design-patterns plugins code-reuse

问题:

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

有时会经常请求同一字段提供更多格式。

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

最佳答案

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

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

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 方法中实现读取数字并将其转换为单词的逻辑。另请注意,保存字段名称和值的类应该传递一个格式化程序。如果您有任何疑问,请告诉我。

关于java - 使用哪种模式?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28928690/

相关文章:

java - 在 vaadin 的浏览器中显示文本文件

c# 从 PDF 中读取行

生成雷达图的PHP方案

design-patterns - 复合模式设计问题

java.lang.IllegalStateException : Expected BEGIN_OBJECT but was STRING at line 1 column 62 错误

java - stanford nlp 共指解析错误 : Exception in thread "main" java. lang.IllegalArgumentException : File doesn't exist: example_file. txt

c# - 工作单元和存储库模式

c# - 在派生类中添加属性

java - 搜索大目录中的多个文件夹 - JAVA

c# - ASP.Net C# 将 PDF 保存到目录