什么是文件创建的好设计模式?

时间:2012-02-07 15:13:34

标签: java file design-patterns file-io

在一个应用程序中,我有一项任务是创建将由第三方使用的文件。实际上文件中有三种不同类型的内容:

  1. 将数据发送到第三方应用的员工卡列表;
  2. 收集生物统计学的员工卡清单;
  3. 数字间隔。
  4. 现在我只有一个名为FileGenerator的类(通用名称,我认为是坏名称)接收数据并创建一个具有某些名称约定的文件(时钟代码,文件类型,日期和小时)。

    有一个好的设计模式可以确保文件名约定仍然存在,并为每种类型的文件分割特定类中的文件生成?

    有一种很好的方法可以重用生成文件的代码(不要在特定的类中重复自己)?

    这是现有课程的一部分:

    class FileGenerator {
        private List<String> contentOfFile;
        private String fileName;
    
        //I - include employees
        //C - change employees
        //R - remove employees
        //B - collect biometry
        //N - interval of numbers
        private String option;
    
        private void getFileName(){ ... } //this assure the file name convention
        public void generate(){ ... } //this generate the file with content
    
    }
    

    到目前为止我的想法:

    1. 创建一个abstract class来保存名称约定。并将内容写入文件。
    2. 创建一个知道所有类型文件的factory class(工厂是一个很好用的模式吗?)。
    3. 为文件类型实现具体类,以定义要写入的内容。

1 个答案:

答案 0 :(得分:0)

或多或少你说的话:

1 - 用于写入文件的模板方法模式。我在想这样的事情:

public abstract class EmployeeCardFileGenerator {
   /**
   * @return the generated file name
   */
   public abstract String getFileName(/*any params you need to get the file name*/);

   /**
   * @return the line corresponding to the given data record
   */
   public abstract String getLine(EmployeeCardData data);

   /**
   * @return the header to be appended at the beginning of the file
   */      
   public abstract String getHeader(/*any header params*/);

   /**
   * @return the footer to be appended at the end of the file
   */
   public abstract String getFooter(/*any footer params*/);

   public void generateFile(/*any params*/) {
      List<EmployeeCardData> data = queryData();

      File f = createFile();
      PrintWriter pw = getWriter(f);
      pw.println(getHeader());

      for(EmployeeCardData ec : data) {
          pw.println(getLine(ec));
      }

      pw.println(getFooter());

      cleanup();
   }
}

2-你会有不同的实施方式,由工厂配发。