生成に関するパターン
生成に関するデザインパターンは、オブジェクトを生成していく過程を抽出したものである。
このパターンを利用すれば、オブジェクトがどのように組み合わされるのか、どのように表現されるのか、といったことからオブジェクトを利用することができる。
クラスに基づく生成パターンでは、インスタンス化されるクラスを変更するために継承を用いるが、オブジェクトに基づく生成パターンでは他のオブジェクトにインスタンス化を委譲する。
クラス継承よりもオブジェクトコンポジションに頼る形でシステムを発展させていく場合に、生成に関するパターンは重要になる。
この場合には、ある決まった振る舞いの集合を直接コーディングするよりも、うまく組み合わせることで複雑な振る舞いを実現できる、基本的な振る舞いの集合を定義することに重点が置かれる。
つまり、特定の振る舞いを持つ合成オブジェクトを生成するには、単に1つのクラスをインスタンス化する以上のことが必要とされる。
生成に関するパターンでは、2つの問題が繰り返し議論される。
第1に、使われる具象クラスに関する知識をどうすればうまく隠蔽できるかという問題である。
第2に、これらのクラスのインスタンスが生成され組み合わされる方法をどうすれば隠蔽できるかという問題である。
システムはオブジェクトの抽象クラスで定義されるインタフェースだけを把握しておけばよいようにしておきたい。
生成に関するパターンを使うことで、結果的には、何が生成されるのか、どれが生成するのか、どのように生成されるのか、いつ生成されるのか、といったことに関する柔軟性が向上する。
つまり、構造や機能を自在に変化させることのできる"部品"オブジェクトの組み合わせとして、システムを作ることができるようになる。
このときの組み合わせは、静的(コンパイル時に確定される)であっても、動的(実行時に確定される)であってもよい。
生成に関するパターンはときには競合することになる。
たとえば、PrototypeパターンとAbstractFactoryパターンのどちらを使うべきなのか選択に困る場合がある。
また、パターンを相補的に利用する場合もある。
たとえば、Builderパターンは、何を生成するのかに関して、他のパターンを使って実装することができる。
あるいは、Prototypeパターンを実装する場合には、Singletonパターンを使うことができる。
creational pattern
#GoF