2017-02-27 55 views
1

在我的問題中,我有一組不同的類型和Holder(或容器,如果你喜歡這個術語)這些類型的類。每個Holder都可以關聯到任意類型的元素,但具有任意限制。「標記容器」的良好解決方案?

問題是,類型的結構可能相當複雜,我可以有一些亞型,如A1,A2,A3,B1,B2與一些不同的行爲。

例如,我可以有一個類Car和亞型Convertible,和其他類HelicopterApache亞型,使容器能夠與僅此兩種特定類型的關聯。 CarHelicopter將從相同的父類派生(Vehicle,後面的示例)。

這不是一個真正的難題本身,但我想使它足夠靈活和可維護。這些類型不會被硬編碼,而是來自應該很容易生成和讀取的配置文件;配置Holders應該像A1 | B3 | C2一樣簡單。所以我沒有找到靈活性和可用性之間的甜蜜點。

必須有一些解決方案或模式。想到了帶點口罩的東西,但我沒有與他們的經驗,我不知道使用它們的最佳方式。

你知道這個特定問題的一些很好的解決方案嗎?

回答

0

我最終創建了一個存儲不同類型的管理器,並將其相應的ID作爲unsigned int。我的軟件並不真正關心用戶定義了什麼任意標籤,因此每個標籤組合的單個數字都很好。我們可以將一個類型看作每個元素具有的類型列表的抽象。

我的經理爲每個標籤組合分配一個ID,所以如果您將相同的標籤放置兩次,它會得到相同的結果。然後,整數比任何類型的列表都容易比較。

與我正在考慮的其他選項相比,它的使用和實施也更簡單。

這裏有一個C#的原型我做到了,它可能沒有明確的,但你的想法:

public class TypeManager{ 
    private static uint _ID = 0; 
    private static Dictionary<string,uint> typemap = new Dictionary<string,uint>(); 

    public static uint GetType<T>(List<T> types) { 
     string key = ""; 
     for(int i = 0; i < types.Count; ++i) 
      key += types[i] + ">"; 
     return GetType(key); 
    } 

    public static uint GetType(string key) { 
     if(!typemap.ContainsKey(key)) { 
      typemap[key] = _ID++; 
     } 
     return typemap[key]; 
    } 
} 
相關問題