0

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

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

如果我只有三种类型,那就行得通,但是如果我决定使用工厂模式的灵活性添加更多类型,那么就会出现如何存储它们的问题,因为每次添加一个时我都必须制作一个特殊的字典...

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

_factoryOutput[type] = type[location] = ArrayOfTypes

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

4

1 回答 1

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;
}
于 2010-01-08T23:32:11.920 回答