- 追加された行はこの色です。
- 削除された行はこの色です。
#freeze
[[デザインパターン]]
* Factory Method [#p1909f06]
** 適応可能性 [#t5b060e9]
- クラスが、生成しなければならないオブジェクトのクラスを事前に知ることができない場合。
- サブクラス化により、生成するオブジェクトを特定化する場合。
- クラスが責任をいくつかのサブクラスの中の1つに委譲するときに、どのサブクラスに委譲するのかに関する知識を局所化したい場合。
** 構造 [#e1e67db2]
&ref(Factory Method);
&ref(Factory Method.gif);
*** 構成要素 [#l034dfa2]
: Product クラス ( Document クラス) |
-- factory method が生成するオブジェクトのインタフェースを定義する。
: ConcreteProduct クラス ( MyDocument クラス) |
-- Product クラスのインタフェースを実装する。
: Creator クラス ( Application クラス) |
-- Product 型のオブジェクトを返す factory method を宣言する。また、ある Concrete Product オブジェクトを返すように factory method の実装をデフォルトで定義することもある。
-- Product のオブジェクトを生成するために factory method を呼び出す。
: ConcreteCreator クラス ( MyApplication クラス) |
-- ConcreteProduct クラスのインスタンスを返すように、factory method をオーバーライドする。
** 目的 [#c6ec4166]
オブジェクトを生成するときのインタフェースだけを規定して、実際にどのクラスをインスタンス化するかはサブクラスが決めるようにする。Factory Method パターンは、インスタンス化をサブクラスに任せる。
** コメント [#f053e3ae]
#comment
##comment_kcaptcha