質問

私は利用したことのない工場の前の単純な理由かわからない私がけるという仕組みが必要になる。いて少しゲームの空いた時間についておりましたが実施FMODの音が出ます。ご本人の了解のもと、掲載しているラッパー設計のためのOpenALって異なります音のセットアップを行くような...

SoundObject* SoundObjectManager* SoundObjectFactory*

のSoundObject基本としたインスタンスのそれぞれの音がオブジェクトです。のSoundObjectManagerだけでいろいろなものを作り出すこれらのオブジェクト。この成することができるようにするに十分な感たっぷり感が得られませんの工場では何で利用されています。私は読書にFactorysだんに取得します。

他の助けがをお願いいたします。

役に立ちましたか?

解決

「仮想コンストラクタ」として工場を考えます。それはあなたが、共通のコンパイル時の型が異なるランタイムタイプでオブジェクトを構築することができます。あなたは、単に別のランタイム型のインスタンスを作成するために工場を伝えることで動作を切り替えることができます。

他のヒント

工場で使用するデバイスの実装する必要parametrized.FMODは、クロスプラットフォームが必要かを決めるコンクリート実施すためのプラットフォーム.その工場で行っている。が主に二つのパターン 抽象パターン工場ファクトリメソッドのパターン.

仮説的な状況:私は、私は複数のプラットフォーム上で実行するサウンドライブラリを書いています。私は可能な限り、コードの限りをプラットフォームに依存しないようにしようよ、確かにそれのいくつかは、Linux対OSX対Windowsのため変更する必要があります。

だから私はすべてのこれらの異なる実装を書きますが、私は、エンドユーザーがの自分ののプログラムは、LinuxまたはWindowsに依存または何でも作るために持っている必要はありません。私も自分のAPIに4つの異なるインターフェースを維持する必要はありません。 (これらは、ちょうどあなたが工場を作成することがあります理由の一部であることに注意してください - 他の状況は確かにあります)。

だから私は、クライアントが使用するために取得するすべてのメソッドを定義し、この素敵なジェネリックSoundObject基本クラスを定義します。それから私は私のLinuxSoundObjectWindowsSoundObject、および5人の他はSoundObjectから派生します。しかし、私は、ユーザーからのすべてのこれらの具体的な実装を隠すだけSoundObjectとそれらを提供するつもりです。代わりに、あなたは昔ながらのSoundObjectFactoryであることをあなたに見えるものをつかむために私SoundObjectを呼び出す必要がありますが、本当に私はあなたのための正しい実行時の型を選択したし、それを自分自身をインスタンス化します。

2年後に、新しいOSは、約来て、Windowsを変位させます。代わりにあなたのソフトウェアを書き換えるためにあなたを強制的に、私はちょうど新しいプラットフォームをサポートするために、私のライブラリを更新し、あなたは、インターフェイスへの変更を見ることはありません。

これは、すべてのかなり不自然ですが、うまくいけばあなたのアイデアを得る。

工場では実際に使用されているものランタイムタイプ(すなわち、インプリメンテーション)からインターフェイスの消費者を隔離する。

工場は、制御の反転を実装するために使用することができ、あなたのコンポーネントのロジックからインスタンス化コード(「新しいのを)分離すること。あなたがテストしたオブジェクトが他のオブジェクトの束を作成したくない場合がありますので、あなたはユニットテストを書いているときに便利です。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top