2012-02-07 92 views
4

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

  1. 向第三方应用发送数据的员工卡列表;
  2. 收集生物特征的员工名单列表;
  3. 数字间隔。

现在我只有一个接收数据,并创建了一些命名约定(时钟的代码,文件类型,日期和时间段)的文件类名为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. 将具体类实现为文件类型以定义将写入哪些内容。

回答

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-您将有不同的实现这些,由工厂分配。

+0

使'getFileName''具体'和'final'是确保名称约定的好方法吗? – 2012-02-07 15:41:21

+0

对你的实现类是的,在这里你为那些实现这个类的人提供了一个钩子,以便能够提供他们喜欢的文件名。即使用它来生成另一个名称的文件。 – MahdeTo 2012-02-08 05:34:27