0

現在、文字列に基づいてオブジェクトを作成するために使用されている switch ステートメントがあります。抽象汎用オブジェクトを拡張する 3 種類のオブジェクトがあります。私は実際に工場のパターンを使用する必要があります。これは現在把握しています。したがって、私の問題は次のとおりです。ファクトリ パターンの柔軟性は高く評価していますが、現在、製品になる可能性のあるものをそのタイプ専用の特別な辞書に保存しています。

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

型が 3 つしかない場合はこれで機能しますが、ファクトリ パターンの柔軟性を利用してさらに型を追加することにした場合、型を追加するたびに特別な辞書を作成する必要があるため、それらを格納する方法が問題になります。 ...

私が考えることができる唯一の答えは、辞書をネストすることです。これはかなり遅く聞こえます。

_factoryOutput[type] = type[location] = ArrayOfTypes

それはおそらく実行可能な解決策ですが、よりクリーンな解決策を提案できる人はいますか? 私は AS3 で作業していますが、より一般的なソリューションを自由に提供してください。

4

1 に答える 1

0

考えられる解決策の 1 つは、製品に getType() メソッドを実装させることです。これは、その製品タイプに固有の文字列または int を返すだけです。製品タイプが出現したときに動的に一意の配列を作成できます(つまり、タイプの配列が存在するかどうかを確認し、保存する前に必要に応じて作成します)、または、すべての製品タイプを 1 つの配列に保存し、それらを取得するためのフィルター関数を使用することもできます。 . この例は次のようになります。

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 に答える