2014-01-24 58 views
1

我正在創建一個應該包裝一些對象創建的工廠方法。問題:你寧願在構造函數中提供所需的數據,還是爲方法本身提供參數?創建工廠 - 在構造函數或參數中提供數據?

class PersonFactory { 
    //constructor only neccessary of no param in method 
    public PersonFactory(PersonDTO dto) { 
     this.dto = dto; 
    } 

    public Person createPerson(PersonDTO dto) { 
     //create the complex person 
     return person; 
    } 

    //more methods to come 
} 

你會怎麼做,爲什麼?

new PersonFactory(dto).createPerson(); 
new PersonFactory().createPerson(dto); 
+0

這甚至不是一個*選擇*。如有疑問,請同時提供。 –

回答

2

這兩個選項都有效。

這取決於你是否要達到約有他們dto屬性已經設置的工廠,或者如果您知道屬性只有當你使用的工廠。

當使用工廠的班級不應該依賴於PersonDTO(不管是什麼)時,將它作爲私人財產附加到工廠是有意義的。

但是,當PersonDTO是由工廠用戶創建的對象時,您可以將其提供給create-method。

0

我會選新PersonFactory()createPerson(DTO)。因爲它更方便。如果你想創建更多的對象,你不需要創建工廠類的新實例。

0

我會去的

createPerson(dto) 

對我來說這是更容易測試。 同樣在這種情況下,您實際上並不需要PersonFactory的實例 - 您可以簡單地將該方法設爲靜態。

0

我用工廠的設計規則是:

  • 不要在構造函數中繁重的工作
  • 製作工廠是可重複使用的(理想情況下是線程安全的)
  • 進行實例相關的東西的方法

這意味着,我與new PersonFactory().createPerson(dto)方法去。

即使兩種方式在本例中都是有效的,對於您創建的所有工廠而言,更容易遵循一種標準方法。這樣,您的代碼稍後將更容易理解。

相關問題