デザインパターン
design pattern
過去のソフトウェア設計者が発見し編み出した設計ノウハウを蓄積し、名前をつけ、再利用しやすいように特定の規約に従ってカタログ化したもの
書籍『オブジェクト指向における再利用のためのデザインパターン』において、GoF (Gang of Four) と呼ばれる4人の共著者が導入した
デザインパターン (ソフトウェア) - Wikipedia
内容
生成に関するデザインパターン
Abstract Factory
関連する一連のインスタンスを状況に応じて、適切に生成する方法を提供する
Builder
複合化されたインスタンスの生成過程を隠蔽する
Factory Method
実際に生成されるインスタンスに依存しない、インスタンスの生成方法を提供する
Prototype
同様のインスタンスを生成するために、原型のインスタンスを複製する
Singleton
あるクラスについて、インスタンスが単一であることを保証する
構造に関するデザインパターン
Adapter
元々関連性のない2つのクラスを接続するクラスを作る
Bridge
クラスなどの実装と、呼び出し側の間の橋渡しをするクラスを用意し、実装を隠蔽する
Composite
再帰的な構造を表現する
Decorator
あるインスタンスに対し、動的に付加機能を追加する
Filterとも呼ばれる
Facade
複数のサブシステムの窓口となる共通のインタフェースを提供する
Flyweight
数のインスタンスを共有し、インスタンスの構築のための負荷を減らす
Proxy
共通のインタフェースを持つインスタンスを内包し、利用者からのアクセスを代理する
Wrapperとも呼ばれる
振る舞いに関するデザインパターン
Chain of Responsibility
イベントの送受信を行う複数のオブジェクトを鎖状につなぎ、それらの間をイベントが渡されていくようにする
Command
複数の異なる操作について、それぞれに対応するオブジェクトを用意し、オブジェクトを切り替えることで、操作の切り替えを実現する
Interpreter
構文解析のために、文法規則を反映するクラス構造を作る
Iterator
反復子
複数の要素を内包するオブジェクトのすべての要素に対して、順番にアクセスする方法を提供する
Mediator
オブジェクト間の相互作用を仲介するオブジェクトを定義し、オブジェクト間の結合度を低くする
Memento
データ構造に対する一連の操作のそれぞれを記録しておき、以前の状態の復帰または操作の再現が行えるようにする
Observer
publish-subscribe model
インスタンスの変化を他のインスタンスから監視できるようにする
Listenerとも呼ばれる
State
オブジェクトの状態を変化させることで、処理内容を変えられるようにする
Strategy
データ構造に対して適用する一連のアルゴリズムをカプセル化し、アルゴリズムの切り替えを容易にする
Template Method
あるアルゴリズムの途中経過で必要な処理を抽象メソッドに委ね、その実装を変えることで処理内容を変えられるようにする
Visitor
データ構造を保持するクラスと、それに対して処理を行うクラスを分離する
限界
よく使われる設計を一般化された形でまとめたものに過ぎない
あくまでもコンセプトであり、具体的な実装を提供するものではない
すべての状況における最善の設計ではない
デザインパターンをむやみに適用するとコードの複雑さを無意味に高めてしまう
一部のデザインパターンは、プログラミング言語の機能の欠損の印であると主張されることがある
計算機科学者のPeter Norvigは、GoFによる23パターンのうち16パターンは、言語によるサポートによって単純化または除去できることをLispやDylanを用いて実演した
Design Patterns in Dynamic Languages