2012-08-23 40 views
2

我有一個掃描器,它掃描網頁中的特定信息並從中創建一個對象。其中一個屬性是ID,稍後使用來查詢新對象的其餘屬性。因爲構建這個對象的責任被分成幾個類(刮板類和使用其中一個屬性進行查詢的類),所以我想避免使用傳遞Builder(另外,Builder模式一個訪問器似乎對我來說很奇怪)。在避免空值的情況下逐漸建立對象

與此同時,我想在正在構建的對象中避免空引用

番石榴的可選看起來不太合適,因爲對象的屬性在所有步驟完成後肯定不會爲空。

我可以創建單獨的類,像這樣:

class ScrapeablePersonImportPart { 

    String surname; 
    Year yearOfBirth; 
    String externalId; 

    // ... getters, constructor ... 

} 

class PersonImport extends ScrapeablePersonImportPart { 

    SocialSecurityNumber ssn; 
    Color favoriteColor; 

    // ... getters, constructor ... 

    PersonImport(ScrapeablePersonImportPart part, SocialSecurityNumber ssn, Color favoriteColor) { 
     this.surname = part.getSurname(); 
     this.yearOfBirth = part.getYearOfBirth(); 
     this.externalId = part.getExternalId(); 
     this.ssn = ssn; 
     this.favoriteColor = favoriteColor; 
    } 

} 

或者我可以避開子類,並使用組成代替。

隨着程序的發展,很有可能的構建可以組成更多的步驟

有幾個獨立類的解決方案看起來是否合理?

+2

你能否詳述一下爲什麼要避開Builder模式?這看起來非常合適。 – ruakh

回答

1

我會使用組合來代替,因爲您傳遞ScrapeablePersonImportPart您可以委託給它,而不是從它繼承。由於你可能有一個新的XYZPart被傳入,所以委派是有意義的,因爲無論如何你都不能繼承。

如果這些只是用於保存動態數據字段的虛擬對象,我會試圖使用HashMap

相關問題