Factory Method は、 生成に関するデザインパターンの一つで、 具象クラスを指定することなく、 プロダクト (訳注: 本パターンでは、 生成されるモノのことを一般にプロダクトと呼びます) のオブジェクトを生成することを可能とします。
Factory Method では、 オブジェクトの生成において、 直接のコンストラクター呼び出し (new
演算子) 代わりに使用すべきメソッドを定義します。 サブクラスにおいてこのメソッドを上書きすることにより、 生成されるオブジェクトのクラスを変更します。
もし各種ファクトリー系のパターンやコンセプトの違いで迷った場合は、 ファクトリーの比較 をご覧ください。
複雑度:
人気度:
使用例: Factory Method パターンは、 Java コードでは広く使われます。 コードに高度の柔軟性を持たせたい時にとても役に立ちます。
このパターンは、 以下の Java コア・ライブラリーで使われています:
見つけ方: 具象クラスで具象オブジェクトを作成し、 それを抽象型またはインターフェースのオブジェクトとして返すような生成メソッドの存在により、 Factory Method を識別できます。
クロス・プラットフォーム GUI 要素の作成
この例では、 Button はプロダクト、 ダイアログはクリエーターとして機能します。
ダイアログは、 種類によって、 それ独自の要素を必要とします。 ダイアログの種類に応じてサブクラスを作成し、 ファクトリー・メソッドを上書きするのはこのためです。
これで、 ダイアログの種類に応じて適切なボタンのクラスのインスタンスが生成されます。 基底ダイアログは、 共通のインターフェースを使ってプロダクトと連携するため、 多くの変更にもかかわらずコードは動作し続けます。
buttons
buttons/Button.java: 共通プロダクト・インターフェース
buttons/HtmlButton.java: 具象プロダクト
buttons/WindowsButton.java: もう一つの具象プロダクト
factory
factory/Dialog.java: 基底クリエーター
factory/HtmlDialog.java: 具象クリエーター
factory/WindowsDialog.java: もう一つの具象クリエーター
Demo.java: クライアント・コード
OutputDemo.txt: 実行結果 (HtmlDialog)
OutputDemo.png: 実行結果 (WindowsDialog)