質問

現在、文字列に基づいてオブジェクトを作成するために使用される switch ステートメントがあります。抽象汎用オブジェクトを拡張するオブジェクトには 3 つのタイプがあります。本当はファクトリーパターンを使うべきなのですが、現在それを考え中です。したがって、私の問題は次のとおりです。ファクトリ パターンの柔軟性は高く評価していますが、現時点では、候補となる製品をそのタイプ専用の特別な辞書に保存しています。

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

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

私が思いつく唯一の答えは、辞書をネストすることですが、これはかなり遅く感じられます。

_factoryOutput[type] = type[location] = ArrayOfTypes

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

役に立ちましたか?

解決

考えられる解決策の 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;
}
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top