2013-10-17 130 views
0

這是一個設計問題。是否實例化組合對象在Java中實例化它們的組件

我們有雜誌,有副本;副本由文章組成。爲了發佈雜誌的副本,每篇文章都需要驗證;當所有文章都得到驗證時,副本本身就可以發佈。

所以我們有一個Copy類和一個Article類; Copy類具有「發佈」方法,而文章類具有「驗證」方法。

這裏是我的問題:

  1. 如何設計使其由文章的複製類?

  2. 我是否需要實例化與Copy類的實例分開的文章(如果是,我如何使文章成爲複製的一部分),還是可以通過Copy構造函數來實現文章的實例化?每個教程都涉及「組合與繼承」,但在這種情況下,我無法找到描述實例化的教程。

  3. (可選),是否有一種非程序化的方式來編寫Copy.publish方法,以便它只在每篇文章都經過驗證後才能運行?在我看來,每篇文章的狀態和副本的狀態之間應該有某種狀態/同時性的平等(當每篇文章已被成功驗證時副本的狀態是「can_be_published」 - 但我不應該每次嘗試發佈副本時都必須檢查每篇文章的狀態)。

我是相當新的Java和嘗試「經書」寫這個小應用程序,而不是簡單地以程序的方式寫每一個操作,但有上組成令人驚訝的一點信息,我能找到。

+0

我在谷歌中寫道'HAVA composition'。 [這是第一個結果。](http://www.artima.com/designtechniques/compoinh.html)。 –

回答

0

1.

class Copy { 
    private List<Article> articles = new ArrayList<Article>(); 
    public addArticle(Article article) { 
    this.articles.add(article); 
    } 
} 

2.

是的,可以有一個addArticle方法等的上方。但是,如果您想要最初執行所有文章的Copy,則可以將文章列表傳遞到其構造函數中。

3.

class Copy { 
    public boolean canPublish() { 
    for (Article a: articles) 
     if (!article.isVerified()) 
     return false; 
    } 
    return true; 
} 
+0

2:我真的很喜歡在實例化Copy時傳遞字符串列表,並讓Copy基於這些字符串實例化條目。在Copy之外實例化文章,然後將它們傳遞給Copy構造函數,或者在Copy內實例化文章更好?或者它沒有區別? – Bambax

+0

更好地通過它們,否則複製將開始具有特定於文章的方法。 –