インスタンス化するクラスを決定するのはサブクラスに任せる。インタフェースを提供する。オブジェクトの生成手順が複雑な場合に、その生成過程をカプセル化する。生成するオブジェクトの原型をコピーして新しいオブジェクトを生成する。システム内で生成可能なインスタンス数をひとつだけに制限する。クラス同士を接続する。それぞれを独立に変更できるようにする。部分−全体階層を表現するために、クラスの木構造に組み立てる。クライアントは木構造の任意の部分を同一のインタフェースで扱える。サブクラス化ではなく委譲により、クラスに新しい機能を追加する。複数のクラス群からなるサブシステムにアクセスするためのインタフェースを提供する。一度生成したインスタンスはプーリングしておき、必要なときに取り出して使う。オブジェクトへのアクセスをフックするための代理オブジェクトを提供する。要求をオブジェクトとしてカプセル化し、要求の発生と実際の処理を分離する。クライアントからの要求を複数のオブジェクトでたらいまわしにする。構文を表現したオブジェクト構造ともとの文字列を関連付ける。要素に対して順にアクセスする方法を提供する。ことをなくすため、相互作用そのものをオブジェクトとして定義する。オブジェクトの状態を保存しておき、元に戻せるようにしておく。被依存オブジェクトの状態変化を、依存オブジェクトに通知する。振る舞いを別オブジェクトにカプセル化する。アルゴリズムをカプセル化して、アルゴリズムを交換可能にする。ひとつの入力データに対して、アルゴリズム毎に異なる結果を出力する。アルゴリズムを複数のステップに分解し、それぞれのステップを抽象メソッドにする。各ステップでのメソッドの実装はサブクラスで定義する。Visitorクラスを用意する。