实例化复合对象是否在Java中实例化其组件

时间:2013-10-17 17:19:56

标签: java oop instantiation composition

这是一个设计问题。

我们有杂志有副本;副本由文章组成。为了发布杂志的副本,每篇文章都需要进行验证;当所有文章都经过验证后,副本本身就可以发布。

所以我们有一个Copy类和一个Article类; Copy类有一个“发布”方法,而Article类有一个“验证”方法。

以下是我的问题:

  1. 如何设计Copy类以使其由文章组成?

  2. 我是否需要与Copy类的实例化分开实例化文章(如果是,我如何使文章成为副本的一部分),还是可以通过Copy构造函数完成文章的实例化?每个教程都涉及“组合与继承”,但在这种情况下我无法找到描述实例化的教程。

  3. (可选),是否有一种非程序性的方式来编写Copy.publish方法,以便只有在每篇文章都经过验证后才会运行?在我看来,每篇文章的状态和副本的状态之间应该存在某种状态/同时性的相同性(当每篇文章被成功验证时,副本的状态是“can_be_published” - 但我不应该每次尝试发布副本时都必须检查每篇文章的状态。

  4. 我对Java很新,并试图“通过本书”编写这个小应用程序,而不是简单地以程序方式编写每个操作,但是我可以找到的组合信息很少。

1 个答案:

答案 0 :(得分: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;
}