现在,我有一个switch语句,用于根据字符串创建对象。有三种类型的对象可以扩展抽象通用对象。我应该使用工厂模式,我现在正在弄清楚。因此我的问题是:我很欣赏工厂模式的灵活性,但现在我将把可能的产品存储在专用于他们类型的特殊字典中。
_type1[location] = ArrayOfType1s
_type2[location] = ArrayOfType2s
_type3[location] = ArrayOfType3s
如果我只有三种类型,那就有效,但如果我决定添加更多工厂模式的灵活性,那么就会出现如何存储它们的问题,因为我每次都要制作一个特殊的字典我加一个......
我能想到的唯一答案是嵌套我的词典,这听起来很慢。
_factoryOutput[type] = type[location] = ArrayOfTypes
这可能是一个可行的解决方案,但任何人都可以提出更清洁的解决方案吗?我在AS3工作,但随意提供更通用的解决方案。
答案 0 :(得分: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;
}