-GoF-デザインパターン[図]
デザインパターンとは、設計時に頻繁に発生する問題に対する効果的な解法の型のことで、特にErich Gamma, Richard Helm, Ralph Johnson, John Vilissidesら四人がカタログ化した23パターンをGoF(Gang of Four)のデザインパターンと呼びます。
※サムネイルをクリックすると、拡大表示されます。
Adapter Pattern
既存クラスを再利用したいときやインターフェースに互換性のないクラス間で処理を行ないたいときに、新しいインターフェイスを定義したクラス作をることによって、既存クラスに手を加えずに再利用したり、クラス間を連携させて処理を行なうことができる。
Bridge Pattern
機能を定義したクラスと実装のクラスを独立して扱いたいとき、機能の階層と実装の階層を別々のクラス階層に分離することで、機能と実装を別々に拡張することができ、実装を切り替えることができるようになる。
Composite Pattern
階層構造を持つオブジェクトへアクセスしたいときに、親オブジェクトと子オブジェクトに同じインターフェースを定義することで、階層構造を意識せずにアクセスすることができる。
Decorator Pattern
オブジェクト毎に機能を追加したいときや機能を動的に付け外ししたいとき、同じインターフェースを持つオブジェクトで被せるようにすることで、既存クラスに手を加えずに機能追加ができる。
Facade Pattern
あるサブシステムの機能を利用するときに、サブシステム内のクラスを協調させるFacadeオブジェクトを用意すれば、サブシステムの外からはFa_adeオブジェクトだけを意識していればよくなる。
Fly Weight Pattern
非常に多くのオブジェクトを利用する場合やあるオブジェクトの生成コストが高いときに、インスタンスを共有することにより、生成コストを節約できる。
Proxy Pattern
生成コストが高いオブジェクトやアクセスを制限したいオブジェクトがあるときに、そのオブジェクトとそっくりな代理を用意することで、負荷のコントロールやオブジェクトへのアクセス制限ができる。
Abstract Factory Pattern
条件によって組み合わせを変えたい一連の処理があるときに、抽象クラスからバリエーションを持たせたサブクラスを生成し、条件によってそのサブクラスを使い分けることによって、ソースの可読性やメンテナンス性が向上する。
Builder Pattern
生成するのにいろいろな手順が必要なオブジェクトは、生成手順をまとめたオブジェクトを用意しておくことで、間違いなく、かつ簡単にオブジェクトの生成が行なえる。
Factory Method Pattern
セットで使われる複数のクラスがあるときに、一つのサブクラスに他のクラス生成を任せることができる。
Prototype Pattern
生成するオブジェクトが明確でない場合、事前に生成されたオブジェクトをコピーして、インスタンス化することができる。
Singleton Pattern
あるクラスについてのインスタンスをひとつだけしか許したくないとき、そのクラスのインスタンスをひとつに制限できる。
Chain of Responsibility Pattern
ある要求に対して複数のリアクションが取れる場合に、事前に処理すべき条件と順番を決めておくことで、適切なリアクションが取れる。
Command Pattern
複雑な一連の処理を実行するときに、処理命令を格納するオブジェクトを使うことによって、複雑な内容のリクエストを処理することができる。
Interpreter Pattern
新しく言語を作りたいときに、文法を解して実行する手段を得ることができる。
Itarator Pattern
ツリー構造や配列構造のように複雑な構造で保持されているオブジェクトがあるときに、対象オブジェクトの構造を意識しない簡単な操作で対象オブジェクトの構造を扱うことでできる。
Mediator Pattern
複数のオブジェクトを連携させたいとき、連携専用オブジェクトを介して行なうことで、個々のオブジェクト同士で参照することがなくなり、オブジェクトの関係がスッキリする。
Memento Pattern
オブジェクトの状態を戻したいときに、状態を生成するクラスとは別に、状態の履歴を管理するクラスを用意しておくと、オブジェクトを元の状態に戻すことができる。
Observer Pattern
あるオブジェクト(通知元)の状態変化を不特定多数のオブジェクト(通知先)に知らせたいときに、監視オブジェクトを中継させることで、通知元オブジェクトは通知先オブジェクトのことを知らなくてもよくなる。
State Pattern
オブジェクトの状態によって処理内容を変えたいとき、状態毎のオブジェクトを作っておき、処理内容も状態オブジェクトの中に記述することによって可読性が向上し、状態を追加することが容易になる。
Strategy Pattern
入力と出力が同じで、内部の計算式が異なるようなバリエーションを実装したいとき、同じインターフェースをもつ複数のオブジェクトで実装しておくと、条件によるアルゴリズム交換が容易に行なえる。
Template Method Pattern
同じような処理が複数あるとき、処理の一部をサブクラスでオーバーライドすることで、全体を共通化しながら、バリエーションによる影響を局所的に抑えられる。
Visitor Pattern
複数のサブクラスに同じような処理を持たせたいときに、処理専門のクラスを用意して、サブクラスからは処理専門クラスを使うようにすることで、サブクラスに持たせたい処理を、サブクラスから分離させることができる。