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

Java 什么是好的文件创建设计模式?,java,file,design-patterns,file-io,Java,File,Design Patterns,File Io,在一个应用程序中,我的任务是创建将由第三方使用的文件。实际上,文件中有三种不同类型的内容: 向第三方应用程序发送数据的员工卡列表 收集生物测量数据的员工卡清单 数字的间隔 目前,我只有一个名为FileGenerator(我认为是通用的、坏名字)的类,它接收数据并创建一个具有某种名称约定(时钟代码、文件类型、日期和小时)的文件 有一个很好的设计模式可以确保文件名约定保持不变,并且可以为每种类型的文件在特定的类中分割文件的生成 有一种很好的方法可以重用生成文件的代码(不要在特定的类中重复我自己) 这

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

  • 向第三方应用程序发送数据的员工卡列表
  • 收集生物测量数据的员工卡清单
  • 数字的间隔
  • 目前,我只有一个名为
    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
    
    }
    
    类文件生成器{
    私有列表目录文件;
    私有字符串文件名;
    //I-包括员工
    //C-更换员工
    //R-解雇员工
    //收集生物测量学
    //N-数的区间
    私有字符串选项;
    private void getFileName(){…}//这确保了文件名约定
    public void generate(){…}//这将生成包含内容的文件
    }
    

    到目前为止,我的想法是:

  • 创建一个
    抽象类来保存名称约定。并将内容写入文件
  • 创建一个
    factory类
    ,该类将知道所有类型的文件(factory是这里使用的好模式吗?)
  • 对文件类型实现具体的类,以定义要编写的内容

  • 你说的差不多:

    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();
       }
    }
    
    公共抽象类EmployeeCardFileGenerator{
    /**
    *@返回生成的文件名
    */
    公共抽象字符串getFileName(/*获取文件名所需的任何参数*/);
    /**
    *@返回给定数据记录对应的行
    */
    公共抽象字符串getLine(EmployeeCardData数据);
    /**
    *@返回要附加在文件开头的标题
    */      
    公共抽象字符串getHeader(/*任何头参数*/);
    /**
    *@返回要追加到文件末尾的页脚
    */
    公共抽象字符串getFooter(/*任何页脚参数*/);
    public void generateFile(/*任意参数*/){
    列表数据=queryData();
    文件f=createFile();
    PrintWriter pw=getWriter(f);
    println(getHeader());
    用于(员工卡数据ec:data){
    pw.println(getLine(ec));
    }
    println(getFooter());
    清理();
    }
    }
    

    2-您将有不同的实现,由工厂分发。

    制作
    getFileName
    具体的
    最终的
    是确保名称约定的好方法?在您的实现类上是,在这里,您为实现此类的人提供了一个钩子,使他们能够根据自己的喜好提供文件名。i、 e.使用此命令生成另一个具有其他名称的文件。