2010-01-08 62 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