Java/JavaFX Class 由另一个 Class 的实例组成

Java/JavaFX Class Made of Instances of Another Class

我确定已经有了答案,我只是不知道如何用合适的搜索词来描述我需要做的事情。

假设我正在尝试制作一个程序来处理独特的木头(每块木头都有一个 ID)以及由这些独特的木头制成的 tables 的销售。我有两个 classes:WoodPiece 和 Table。

我应该如何创建 Table class 以便它可以包含 Table 的实例,其中列出了独特的木块,以便您可以添加和删除木块直到点table实际上是制造和销售的?现在我想我使 Table 成为一个 subclass WoodPiece,它只有一个 ArrayList of woodPieces。

我不擅长 Java 所以我想在浪费大量时间倒退之前确保我有正确的想法。你知道的任何关于这方面的教程都会很棒。我正在为我的程序使用 JavaFx。

我会使用合成来构造 Table class。 Table 不是 WoodPiece,而是包含 WoodPieces。以后一个Table可能会有桌布或人等

class Table
{
    private Map<String, WoodPiece> woodPieces = new HashMap<>();

    public Table ()
    {
         // constructor
    }

    public void addWoodPiece (WoodPiece wp)
    {
         woodPieces.put(wp.getID(), wp); 
    }

    public WoodPiece removeWoodPiece (String id)
    {
         return woodPieces.remove(id);
    }
}

注意:我使用的是地图而不是列表,因为您的 WoodPiece 对象具有与之关联的唯一 ID。此外,我假设您不关心 woodPieces 的顺序,因为 Table 确实没有组成它的木材的自然顺序。

进一步阅读https://en.wikipedia.org/wiki/Composition_over_inheritance

根据您的描述,我了解到我 table 仅由独特的零件制成,不可能与其他 table 一起制成 table。因此,您只需将 WoodPiece 列表添加到 table class 以及添加和删除方法。

如果你想与其他 table 一起制作一个 table 你应该首先创建一个接口(我们称之为 TablePiece)和两个 Table 和 WoodPiece 必须实现它并且 Table 必须有一个 TablePiece 的列表。在下图中,组件将是 TablePiece、Leaf WoodPiece 和 Composite Table。