【问题标题】:Java/JavaFX Class Made of Instances of Another Class由另一个类的实例构成的 Java/JavaFX 类
【发布时间】:2017-03-05 17:15:51
【问题描述】:

我确信已经有答案了,我只是不知道如何用好的搜索词来描述我需要做什么。

假设我正在尝试制作一个程序来处理独特的木片(每个都有一个 ID)以及由这些独特的木片制成的桌子。我有两个课程:WoodPiece 和 Table。

我应该如何创建 Table 类,以便它可以列出带有独特木块的 Table 实例,以便您可以添加和删除这些木块,直到实际制造和销售桌子为止?现在我在想我让 Table 成为 WoodPiece 的子类,它只有一个 WoodPieces 的 ArrayList。

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

【问题讨论】:

  • 我想你想要捕捉的是一个表格是一个木片,而且一张桌子有一个木片的集合。那正确吗?如果是这样,谷歌“复合设计模式”。

标签: java javafx javafx-2 javafx-8


【解决方案1】:

我会使用组合来构造 Table 类。表不是 WoodPiece,而是包含 WoodPiece。未来,一个 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。此外,我假设您不关心木片的顺序,因为桌子确实没有构成它的木材的自然顺序。

延伸阅读https://en.wikipedia.org/wiki/Composition_over_inheritance

【讨论】:

  • 谢谢!我最终不得不使用 ObservableList,因为我必须将“woodPieces”打印到 TableView,但这让我走上了正确的道路。也感谢维基链接!
【解决方案2】:

我了解您的描述,我的桌子只由独特的部分制成,不可能与其他桌子制成桌子。因此,您只需将 WoodPiece 列表添加到您的表类以及添加和删除方法。

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-05-24
    • 2020-04-28
    • 2013-11-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多