2015-10-07 107 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

相關問題