デザインパターン
オブジェクトの生成に関するパターン
Abstract Factory
お互いに関連したり依存し合うオブジェクト群を、その具象クラスを明確にせず生成するためのインターフェイスを提供する。
Builder
複合オブジェクトについて、その作成過程を表現形式に依存しないものにすることにより、同じ作成過程で異なる表現形式のオブジェクトを生成できるようにする。
Factory Method
オブジェクトを生成するときのインタフェースだけを規定して、実際にどのクラスをインスタンス化するかはサブクラスが決めるようにする。Factory Methodパターンは、インスタンス化をサブクラスに任せる。
Prototype
生成すべきオブジェクトの種類を原型となるインスタンスを使って明確にし、それをコピーすることで新たなオブジェクトの生成を行う。
Singleton
あるクラスに対してインスタンスが1つしか存在しないことを保証し、それにアクセスするためのグローバルな方法を提供する。
プログラムの構造に関するパターン
Adapter
あるクラスのインタフェースを、クライアントが求める他のインタフェースへ変換する。Adapterパターンは、インタフェースに互換性のないクラス同士を組み合わせることが出来るようにする。
Bridge
抽出されたクラスと実装を分離して、それらを独立に変更できるようにする。
Composite
部分〜全体階層を表現するために、オブジェクトを木構造に組み立てる。Compositeパターンにより、クライアントは、個々のオブジェクトとオブジェクトを合成したものを一様に扱うことができるようになる。
Decorator
オブジェクトに責任を動的に追加する。Decoratorパターンは、サブクラス化よりも柔軟な機能拡張方法を提供する。
Facade
サブシステム内に存在する複数のインタフェースに1つの統一インタフェースを与える。Facadeパターンはサブシステムの利用を容易にするための高レベルインタフェースを定義する。
Flyweight
多数の細かいオブジェクトを効率よくサポートするために共有を利用する。
Proxy
あるオブジェクトへのアクセスを制御するために、そのオブジェクトの代理、または入れ物を提供する。
オブジェクトの振る舞いに関するパターン
Chain of Responsibility
1つ以上のオブジェクトに要求を処理する機会を与えることにより、要求を送信するオブジェクトと受信するオブジェクトの結合を避ける。受信する複数のオブジェクトをチェーン上につなぎ、あるオブジェクトがその要求を処理するまで、そのチェーンに沿って、要求を渡していく。
Command
要求をオブジェクトとしてカプセル化することによって、異なる要求や、要求からなるキューやログにより、クライアントをパラメータ化する。また、取り消し可能なオペレーションをサポートする。
Interpreter
言語に対して、文法表現と、それを使用して文を解釈するインタプリターを一緒に定義する。
Iterator
集約オブジェクトが基にある内部表現を公開せずに、その要素に順にアクセスする方法を提供する。
Mediator
オブジェクト群の相互作用をカプセル化するオブジェクトを定義する。Mediatorパターンは、オブジェクト同士がお互いに明示的に参照しあうことがないようにして、結合度を低めることを促進する。それにより、オブジェクトの相互作用を独立に変えることができるようになる。
Memento
カプセル化を破壊せずに、オブジェクトの内部状態を捉えて外面化しておき、オブジェクトを後にこの状態に戻すことができるようにする。
Observer
あるオブジェクトが状態を変えたときに、それに依存するすべてのオブジェクトに自動的にそのことが知らされ、また、それらが更新されるように、オブジェクト間に一対多の依存関係を定義する。
State
オブジェクトの内部状態が変化したときに、オブジェクトが振る舞いを変えるようにする。クラス内では振る舞いの変化を記述せず、状態を表すオブジェクトを導入することでこれを実現する。
Strategy
アルゴリズムの集合を定義し、各アルゴリズムをカプセル化して、それらを変換可能にする。Strategyパターンを利用することで、アルゴリズムを、それを利用するクライアントからは独立に変更することができるようになる。
Template Method
1つのオペレーションにアルゴリズムのスケルトンを定義しておき、その中のいくつかのステップについては、サブクラスでの定義に任せる事にする。Template Methodパターンでは、アルゴリズムの構造を変えずに、アルゴリズム中にあるステップをサブクラスで定義する。
Visitor
あるオブジェクトを構造上の要素で実行されるオペレーションを表現する。Visitorパターンにより、オペレーションを加えるオブジェクトのクラスに変更を加えずに、新しいオペレーションを定義することができるようになる。
| 範囲 | 目的 | 生成 | 構造 | 振る舞い |
|---|---|---|---|
| クラス | Factory Method | Adapter | Interpreter Template |
| オブジェクト | Abstract Factory Builder, Prototype Singleton |
Adapter Bridge Composite Decorator Facade Flyweight Proxy |
Chain of Responsibility Command Iterator Mediator Memento Observer State Strategy Visitor |