2013-10-17 87 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

更好地通过它们,否则复制将开始具有特定于文章的方法。 –