生成パターンは、特定の状況に適した方法でオブジェクトを作成するためのソフトウェア設計パターンです。プログラミング言語など、通常利用可能なオブジェクト作成方法では設計上の制約が生じる場合があるため、独自の作成メカニズムを用いることでより良い設計が可能になります。生成パターンは、システムと、そのオブジェクトがどのように作成、構成、表現されるかを分離することを目的としています。これにより、オブジェクト作成の「何」「誰が」「どのように」「いつ」に関してシステムの柔軟性が向上します。[ 1 ]
生成パターンは主に2つの側面をカプセル化します。1つは、システムが使用する具体的なクラスに関する知識をカプセル化することです。もう1つは、これらの具体的なクラスのインスタンスがどのように作成され、結合されるかを隠蔽することです。[ 2 ]
生成デザインパターンは、オブジェクト生成パターンとクラス生成パターンに分類されます。オブジェクト生成パターンは、オブジェクト生成の一部を別のオブジェクトに委任し、クラス生成パターンは、オブジェクト生成をサブクラスに委任します。[ 3 ]
現代のソフトウェア エンジニアリングは、クラス継承よりもオブジェクト構成に依存するようになるため、ハードコーディングされた動作から、より複雑な動作に構成できるより小さな基本動作セットを定義することに重点が移っています。 [ 4 ]ハードコーディングされた動作は、設計の一部を変更するために全体をオーバーライドまたは再実装する必要があるため、柔軟性がありません。さらに、ハードコーディングは再利用を促進しず、エラーを追跡するのが難しくなります。これらの理由から、生成パターンはハードコーディングされた動作よりも有用です。生成パターンは、設計をより柔軟にします。生成パターンは、具体的なクラスをインスタンス化する必要があるコードから、具体的なクラス内の明示的な参照を削除するさまざまな方法を提供します。[ 5 ]言い換えれば、オブジェクトとクラスの独立性を作り出します。
次のような場合に、生成パターンを適用することを検討してください。

以下は、ほとんどの生成パターンに共通するシンプルなクラス図です。なお、異なる生成パターンでは、追加の、そして異なる参加クラスが必要となることに注意してください。
参加者:
創造的デザインパターンの例としては、以下のようなものがあります。