2012-07-21 152 views
0

假設,我們班A_1A_n和類B_1B_n在哪裏存儲類關係信息?

每個A_i都與一組B_j之間有關係(抽象口語;關係可能是'A_4喜歡B_2'),並且相反。

問:哪裏是存儲關係信息的好地方?這種問題有沒有好的模式?

解決方案1:每個A_i都有一個列表字段存儲B_j它與它有關係。

解決方案2:每個B_i都有一個列表字段存儲A_j它與它有關係。

溶液1和2基本上是相同的。

解決方案3:將信息存儲在第三個「信息」類中,例如,作爲矩陣。

+2

這要看情況。但是我覺得奇怪的是你的一套課程。你不應該有一個A類,一個B類,以及A和B的多個實例嗎? – 2012-07-21 13:29:24

+0

第三種解決方案看起來相當不錯,如果你認爲有一點你可以有一個名爲'Relation'的抽象類和另一個類'Like',這兩個類都將組成關係(A和B)和屬性。 +1 JBNizet的評論 – 2012-07-21 13:29:41

+0

我把它從你的描述,所有的關係都是雙向的? – Keppil 2012-07-21 13:36:50

回答

1

無論你選擇之間解決方案1 ​​解決方案2什麼一類喜歡只存儲在另一個類,這似乎有點倒退的一些信息是哪一個。
因此,我肯定會去爲一個單獨的RelationKeeper類,像這樣:

public enum RelationType { 
    LIKES,HATES... 
} 
public class Relation { 
    RelationType type; 
    Class relatedClass; //Or in what type and form this is stored 
} 
public class RelationKeeper { 
    public List<Relation> getRelationsFor(Class c) { 
    } 
    public void setRelationsFor(Class c, List<Relation> relations) { 
    } 
    public void addRelationFor(Class c, Relation relation) { 
    } 
    ...etc 
} 

這種方式,您可以自定義和改變內部存儲的方法來滿足您的需求,這取決於你希望能夠在只檢索一個類的「外向」關係,或者如果你還想獲取「入站」關係。

相關問題