2016-07-09 8 views
0

新しいコーディングプロジェクトを開始しました。私は自分の前にいるかもしれないが、私はちょっと固まった。私はWikipediaの例に似た、GUI用の抽象ファクトリを実装したかったのです。しかし、さまざまなシステムには、ウィンドウを作成するための独自のパラメータがあります。現時点では私は私のジレンマに以下の解決策が出ている:ウィンドウシステム向けの抽象ファクトリを実装する方法

  1. コンパイラディレクティブを使用し、ちょうどあらゆる可能なデータが含まれているタイプですべてを入れないでくださいコンパイラディレクティブ
  2. に応じて変化タイプを作成します。メンバ
  3. 多態性の階層を作成し、各ウィンドウ関数内で動的キャスティングを使用します。
  4. 情報を保持する何らかの中間シングルトンを使用します。これは特にそうです。それはおそらくキャスティングを伴います。
  5. ビルダーなどの別のパターンを使用してください。

私の目的は、均一な高レベルのインターフェイスを作成して、ウィンドウの作成などがすべてのプラットフォームで同じになるようにすることです。

これはすでに解決策があるはずの共通の問題であるように思われるので、私は#5をするのをためらっています。これはちょうどおもちゃなので、実用的なアプリケーションを構築するよりも学びます。私は既存のコードベースを使用することができますが、それは私の本当の目的を達成しません。

ありがとうございます。

+0

'しかし、さまざまなシステムには、ウィンドウを作成するための独自のパラメータがあります。この具体的な例を示すことができれば幸いです。 – Fuhrmanator

答えて

0

状況によって異なります。しかし、ビルダー(工場内)とデコレータの抽象的なファクトリをGUIコンポーネントのいくつかのデフォルト値で使用すると、デコレータは異なるGUIライブラリの類似コンポーネントと同じインタフェースを持ち、GUIライブラリからクラスを継承します。

0

もっと読むと、まず依存性注入を使って具体的な工場を作ることができたことが分かりました。エントリポイントは、使用しているファクトリの種類を知っているため、クライアントに渡すことができます。以前はそれが見えなかったとは信じられませんが、今までDependency Injectionが "クリック"したとは思いません。

0

各抽象ファクトリのコンストラクタにシステム固有のパラメータを設定します。

public interface WindowFactory { 

public Window build(); 

} 

public class WindowsWindowFactory implements WindowFactory { 

private param1, param2, param3; 

public WindowsWindowFactory(param1,param2,param3) {} // set params 

public Window build() {} // use params 

} 

public class LinuxWindowFactory implements WindowFactory { 

private param1, param2; 

public LinuxWindowFactory(param1,param2) {} // set params 

public Window build() {} // use params 

} 
関連する問題