2012-02-07 23 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