2 つのオブジェクトを構築する必要がA
ありB
ます。これらA
とB
オブジェクトはさまざまな方法で初期化できます。
構築する設計パターンA
(作業中):
A
サブクラスA_txt
、A_tsv
、A_csv
などがあります。各A
サブタイプは (ファイル パス) から構築されstring
ますが、それぞれが異なる方法でファイルをロードします。そのオブジェクトを作成するための適切なファクトリにファイルの種類 (例 ) をマップするレジストリを作成しました。txt
txt
--> A_txt_Factory
tsv
--> A_tsv_Factory
...
WhereA_txt_factory
はファイル パスを受け取り、それをテキスト ファイルとして読み込み、A_txt
オブジェクトへのポインターを返します。
一緒に、このレジストリをファクトリとして使用します。ファイル パスとファイル タイプを指定すると、そのタグに対応するファクトリを検索し、それを使用してA
オブジェクトを構築し、ポインタを返します。
この組み合わせのレジストリとファクトリ デザイン パターンがとても気に入っています。他の誰かが簡単に独自のファイル タイプとそれをロードするためのファクトリを作成し、それをレジストリにチェックインして、他のコードを見ずに使用することができます。
構築する設計パターンB
(助けが必要):
B
すべてが同じタイプから読み込まれるわけではないため、オブジェクトの構築はより困難です (たとえば、すべてのA
サブタイプはstring
ファイル パスを示す で構築されます)。B_text
はテキスト ファイルから (string
ファイル パスを示す提供された から) ロードしますが、以前とは異なりB_intAndA
、 int および のインスタンスから初期化できますA
。
どのようなデザイン パターンを使用して作成できますB
か? 前と同じように、string
どのファクトリを使用するかを示すタグを付けます。ただし、以前とは異なり、各ファクトリは異なるパラメーター (および場合によっては異なる数のパラメーター) を受け入れます。可変パラメータの可変テンプレート関数を使用して何とか達成できると思います(私はC++ 11を使用しているので、それはオプションです)。
この設計パターンは、他の誰か (同じ基本クラスですが、異なる型の異なる数の引数で構築されています) に出くわすことはありますか?
さまざまなサブタイプを構築する個々のファクトリを作成するのは簡単ですが、B
さまざまなタイプと数のパラメーターを受け入れるため、レジストリでインデックスを作成できるようにする方法を知るのは困難です。
これをどのように処理しますか?