现在,我有一个switch语句,它用于创建基于字符串的对象。有三种类型的对象来扩展抽象的通用对象。我真的应该使用工厂模式,我现在正在弄清楚。我的问题是:我欣赏工厂模式的灵活性,但现在我将潜在产品存储在专门用于其类型的特殊字典中。
_type1[location] = ArrayOfType1s
_type2[location] = ArrayOfType2s
_type3[location] = ArrayOfType3s
如果我只有三个类型,这是可行的,但是如果我决定用工厂模式的灵活性添加更多类型,那么就会出现如何存储它们的问题,因为每次添加一个类型时,我都必须制作一个特殊的字典……
我能想到的唯一答案就是嵌套我的字典,这听起来相当慢。
_factoryOutput[type] = type[location] = ArrayOfTypes
这可能是一个可行的解决方案,但有人能建议一个更干净的解决方案吗?我使用的是AS3,但是可以提供一个更通用的解决方案。
发布于 2010-01-08 23:32:12
一种可能的解决方案是让您的产品实现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;
}
https://stackoverflow.com/questions/2031498
复制