2009-10-15 3 views
14

工場クラスが静的であることが一般的です。ファクトリメソッドも静的になります。工場作成メソッド常に静的?

デザインパターンの本のGOFは、これまで工場やその方法は、パターンの厳密な定義を満たすために静的でなければならないことを規定しましたか?

ファクトリ+ /メソッドは静的なパターンの結果ですか?状態データは通常はファクトリクラスによって維持されないため、通常は静的です。

答えて

11

私はパターンの「厳密な定義」のようなものはないと思います。その本質によって、ソフトウェアの中で時と時間を再現する問題の本質を捉え、解決方法を概説します。

具体Factoryパターンと、なし、ファクトリメソッドは静的である必要はありません。パターンの本質は、別のクラスのインスタンスを作成する1つのオブジェクトがあることです。パターンで説明されているような一般的な方法は、クラスに対して静的メソッドを使用することですが、これを行う方法はあなた次第です。しかし、我々のシステムの1つには、実際には2段階の工場メカニズムがあります。あるクラスに対して静的メソッドを使用して、ファクトリオブジェクトを作成します。ファクトリオブジェクトは、一連の実装の中から選択して、ファクトリオブジェクトを使用して、実際の作業を行うために必要なオブジェクトのインスタンスをスタンプします。

はまた、静的メソッドを持っていない言語でのファクトリパターンの実装を検討してください。たとえば、Scalaではクラスの代わりにオブジェクトを使用します。これの振る舞いは、Javaのクラスで静的メソッドを使うのとよく似ていますが、実装の性質はまったく異なります。

+2

一部の言語では、パターンが厳密ではないが、パターンはパターンがコントロールしていない、寛大ではありません! – djna

6

いいえ、工場は状態を保持できます。何が必要なのかによって異なります。

私はその意思が静的であることをお勧めしたい最初のインスタンスに良い選択だ - あなたが問題に実行する傾向がある静をunittestのしようとした瞬間をhovewer。

あなたが特に必要とするまで、離れてください。

+0

パターンがあなたのためにあなたの思考を行うことを期待するのではない本当に重要+1 –

3

いいえ、デフォルトでファクトリクラスは静的であるべきではありません。実際には、静的クラスはOOPの世界でも歓迎されていません。何故なら、それらはある状態を伝えてグローバルなアプリケーション状態を導入することもできるからです。存在するファクトリオブジェクトが1つだけ必要な場合は、シングルトンパターンを使用してファクトリオブジェクトの作成を制御できます。

ファクトリメソッドの場合 - 静的にしても問題ありません(実際には他の合理的な方法はありません:))。

0

私のBlueCarFactoryと私のRedCarFactoryは両方とも方法createCarを持っていると思います。実際の作成メソッドをパラメータ化して再利用するのは常識です。次に、CarFactory(blue)CarFactory(red)を作成します。つまり、CarFactoryオブジェクトには、生成された車の色を格納するメンバ変数が必要です。

結論:Factoryクラスのメソッドを静的にすることは意味がありません。シングルトンファクトリオブジェクトを作成することは理にかなっています。

関連する問題