2010-01-08 70 views
0

现在,我有一个switch语句被用来创建基于字符串的对象。有三种类型的对象扩展了一个抽象的通用对象。我真的应该使用工厂模式,我现在正在弄清楚。因此,我的问题是:我很欣赏工厂模式的灵活性,但现在我将这些可能的产品存储在专用于其类型的特殊字典中。存储工厂模式产品

_type1[location] = ArrayOfType1s 
_type2[location] = ArrayOfType2s 
_type3[location] = ArrayOfType3s 

,如果我只有三种类型的工作,但如果我决定要加入更多与工厂模式的灵活性,那么呈现的如何存放,因为我不得不做出一个问题每次添加一个特殊字典...

我能想到的唯一答案是嵌套我的字典,这听起来很慢。

_factoryOutput[type] = type[location] = ArrayOfTypes 

这可能是一个可行的解决方案,但任何人都可以建议一个更清洁的?我在AS3工作,但随时可以提供更通用的解决方案。

回答

0

一个可能的解决方案是让您的产品实现getType()方法。这可能会返回一个字符串,或者是该产品类型唯一的int。您可以动态地为产品类型创建独特的数组(如:检查数组是否存在类型,如果需要在存储之前创建)或者,您可以将所有产品类型存储在一个数组中,并具有检索它们。一个这样的例子是:

function getProductsByType(type:String):Array { 
    var matched:Array = []; 
    for(//loop over all products) { 
     //if type is what your looking for, push into matched array 
    } 

    return matched; 
} 
+0

我确实需要保持它们分开为我的具体实施,但很好的信息。如果我按照我上面所说的那样,我倾向于这一点,我可以动态地做到这一点。我不确定用字符串动态创建数组/字典的另一种方法。这样我就可以使用Dictionary的键和字符串来引用新的Dictionary/Array。 – grey 2010-01-09 00:02:23

+0

该解决方案肯定没有问题。只要您不必为每种类型手动添加新数组。 – 2010-01-09 00:16:03