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

时间:2017-03-05 17:15:51

标签: java javafx javafx-2 javafx-8

我确信已经有了答案,我只是不知道如何用良好的搜索条件来描述我需要做的事情。

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

我应该如何创建Table类,以便它可以包含列出了独特木片的Table实例,以便您可以添加和删除片段,直到实际制作和销售该表为止?现在我想我将Table作为子类WoodPiece,它只有一个woodPieces的ArrayList。

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

2 个答案:

答案 0 :(得分:1)

我将使用合成构造Table类。表不是WoodPiece,而是包含WoodPieces。将来,桌子可能有桌布或人等等。

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,因此我选择了地图而不是List。此外,我假设你不关心woodPieces的顺序,因为Table真的没有构成它的木材的自然排序。

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

答案 1 :(得分:0)

我理解你的描述我的表只用独特的部分制作,不可能用其他表格制作表格。因此,您只需要向表类添加一个WoodPiece列表以及添加和删除方法。

如果你想能够用其他表创建一个表,你应该首先创建一个接口(让我们称之为TablePiece),Table和WoodPiece都必须实现它,Table必须有一个TablePiece列表。在下图中,Component将是TablePiece,Leaf WoodPiece和Composite Table。 enter image description here