2015-10-07 45 views
0

我需要支持具有嵌套组件的UI客户端。我想出了下面的对象模型 -在java中支持嵌套对象模型的最佳方式是什么?

public class SomeUserInterface { 
     String name; 
     List<Component> components; 
} 
public class Component { 
     List <Component> components; 
} 

这里,SomeUserInterface将有多个组件和每个组件可能嵌套在IT组件。 在建议的对象模型中是否存在任何问题?或者什么是支持嵌套组件的最佳方式?

注意:SomeUserInterface和Component不是相同的类。 SomeUserInterface可以包含Component,反之亦然。

+0

Container和Component有什么区别?为什么有两个看起来完全相同的类? –

+2

不要将它们定义为类,使它们成为接口。它使您的继承模型在未来变得更加灵活。 –

+0

@AndyTurner - 这是示例实现。是的,会有Interfaces。 – PST

回答

0

ComponentContainer都可以包含组件。如果它们为添加/删除等的相同方法,就应该从一个共同的祖先继承:

public class ComponentHolder { 
    List<Component> components; 
} 

public class Component extends ComponentHolder { 
    // ... 
} 

public class Container extends ComponentHolder { 
    String containerName; 
    // ... 
} 

编辑:另一种可能性是使用组合物。这样你的类不需要共同的祖先,但仍然会使用相同的组件列表实现。如果您决定更改组件的存储方式,则只能在一个地方完成。

public class ComponentHolder { 
    List<Component> components; 
    // add, remove, get, ... 
} 

public class Component { 
    ComponentHolder content; 
    void add(Component c) { 
     content.add(c); 
    } 
    // ... 
} 

public class Container { 
    String containerName; 
    ComponentHolder content; 
    // ... 
} 
+0

我编辑了我的问题(代码以及添加注释)。以您的示例为例,Container本身就是一个Component,事实并非如此。 – PST

+0

@PST我已编辑我的答案 – Cinnam

+0

这似乎很有用,但如何通过共同的父母即ComponentHolder链接两个逻辑无关的类,如Container和Component? – PST

相关问题