2017-02-27 56 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]; 
    } 
} 
相关问题