私は実際には複雑ではないデザインの問題を抱えていますが、それを解決するためのエレガントな方法を見つけたいと思います。そして私はこれについて考えました:
問題:Bのコレクションを初期化して保持するクラスAがあります
Bは単なるインターフェースであり、実装する必要があります(したがって、クラスC、D、E、..があります)。
コンストラクターでAは大量のデータセットを受け取り、各データセットを指定してBの一部(同じクラスまたは異なるクラスの多くの異なるインスタンス化)を初期化する必要があります。AにBの実装を知らないようにしたいと思います。
私にはいくつかの実用的な解決策がありますが、私は一種の「コンストラクターでの委任」について考えていました。例えば:
1. for each dataset, ds
2. for each implementation of B, bi
3. try to instantiate bi(ds)
4. if success (means no exception)
5. keep reference
これは、biが初期化とパフォーマンスが重要なアプリケーションにあるかどうかを確認するために使用するデータと計算が、それを2回実行したり、コレクションクラスで実行したりすることを避けたいためです。
それは本当に素晴らしいことですが、明らかに問題は2行目です
......実際には例外ではないものに例外を使用することについての疑問もあります。(4行目)では
、
データを評価してすべてを1つにまとめる
パターンを作成します。
-いくつかの「アーキテクチャクラス」を作成することは避けてください。このような単純なタスクでは、クラスの爆発的な増加(次のデザインパターンのJavaスタイルの原則imhoで誇張する場合の典型的なもの)を避けたいと思います。-できるだけ早く。
-...エレガントです:)