2017-10-30 20 views
0

私はこれが戦略パターンの下にあるかどうか疑問に思っていました。これは戦略パターンですか?

私はIConvertersのリストを持っています(ファイルをingameアセットに変換しています)。それらはすべてConverterManagerの内部にあります。すべてのIConverterは、それが探している拡張タイプを持っています。では、拡張子が.exeのファイルがあるとします。 ConverterManagerは、.exe拡張子を検索するコンバータを探します。それが存在すれば、それはファイルのパスを通過し、そうでなければ何もしません。

ファイルの拡張子に基づいて選択する動作を計算しているので、これは戦略パターンかどうか疑問に思っていました。

ありがとうございます。

答えて

0

技術的には、マネージャのすべてのインスタンスを保持しているため、技術的には戦略パターンではありません。これはSingle Responsibility principleに従いません。あなたには、いくつかの入力ファイルを与えると、作成した資産を受け取り、私は多分AssetFactory(または何、これまでお使いの場合には合っ)ConverterManagerを呼ぶような戦略パターンの技術的な詳細を満たすためにあなたのデザインを変更するために

( IConverterインターフェイスを利用して、インターフェイスを使用します。

次に、あなたはまた、IConverterConverterManagerから指定したファイルで使用するために解決するロジックを分離する必要があります。 ConverterResolverまたはConverterFactoryに、このクラスに名前を付けた後、純粋な戦略パターンのようなデザインを作用させるためにAssetFactoryIConverterインスタンスを入れ替えます。

しかし、戦略パターンが本当にこのケースに合っておらず、単にそれを工場パターンとして実装するだけで十分かもしれません。

+0

ここでお手伝いできますか? 私の例では、ConverterManagerがすべてのコンバータを保持しており、エクステンションタイプでそれらを選択しているか、コンバーターと何か関係があるので、Single Responsibility原則に従っていませんか? 現在、ConverterManagerはコンバーターを保持しており、指定された拡張子のコンバーターを選択します(IConverterが拡張子を戻します)。そして、IConverterはアセットへの変換を行います。 – patrick

+0

拡張子に基づいて選択されたIConverterを使用するクラスがまだわかりません。 –

+0

さて、アセットフォルダ内のすべてのファイルを読み込むクラスがあります。次に、 "test.txt、test2.exe、test3.js"のようなリストを作成することができます。次に、それらがすべて見つかると、ファイルのリストをループし、それらのすべてをConverterManagerに送信します。次に、ConverterManagerは、拡張子に基づいてIConverterを見つけ出し、その上に関数ProcessFile(path)を使用します。 (IConverterはfilereaderclassに戻されません)。 ConverterManagerが返す唯一のものは、変換で何が起きているかを示す応答データオブジェクトです(しかし、これは実際には関係ありません)。 – patrick

関連する問題