が、それは常に実際に可能
と同じくらい一般的であることをメソッドの戻り値の型を指定することをお勧めします、これは工場ではなく、オブジェクト自体のコンストラクタを使用しての強みの一つであります:返されるオブジェクトの振る舞いが戻り値の型によって指定されている場合は、返されるオブジェクトを自由に変更することができます。
クラスを抽象クラス(またはできればインターフェイス)で参照する場合は、他の人がここに入力できます)、後でサブモデルである限り、完全に別のオブジェクトを工場から返すことにします抽象クラスの型/は、ファクトリメソッドが返すインタフェースを実装します。つまり、アクションクラスへのすべての通信がファクトリメソッドの戻り値型のインターフェイスを経由するため、クライアントコードは、あなたの 'アクション'クラスの実装の詳細の変更を受けません。
MainAction
とQuickAction
が、彼らはかなり同様の目的のためにかなり似た設定に使用される意味、関連する
場合は、あなたの質問に直接答えは、私は戻って、サブタイプを返すファクトリメソッドで、彼らのために工場を作成しますAction
です。これにより、できるだけ多くの実装の詳細をクライアントから隠すことができます。また、アクションクラスを一般的な方法で参照しています。
MainAction
とQuickAction
が大きく違った概念を表している場合は、それぞれのクラスにいくつかの静的ファクトリメソッドを実装するだけで、ファクトリを気にする必要はありません。この背後にある理由は、2つの異なるタイプのオブジェクトのファクトリを作成すると、工場ではlow cohesionになります。同じインターフェースを使用して同じ機能を提供しない異なる概念を参照することは、あまりにも一般的な戻り型を指定する例です。
しかし、かなり限られた経験から描いていることに注意してください。
ジョシュア・ブロッホが「効果的なJava」を読むことをお勧めします。私はその本から多くを学びました。
私はあなたのコメントに特に不一致はありませんが、(編集後であっても)その質問に対する回答ではありません。 –
@ジョン私は疑問を誤解しているかもしれません。あなたは精巧にできますか? – SecularisticSloth
OPは、工場/工場の方法のパターン、その一般的な形式、およびその使用の理由についてのアイデアをすでに把握しているようです。 OPの質問には、工場がどのような具体的な形態をとるべきか、どのように具体化すべきかという2つの問題があります。それはあまりにも広いので、実際には特に良い質問ではありません。 –