以下はフリー百科事典『ウィキペディア(Wikipedia)』を引用しています。
システムアイパターン(SIパターン)を追加しました。

デザインパターン (ソフトウェア)

出典: フリー百科事典『ウィキペディア(Wikipedia)』

移動: ナビゲーション, 検索

ソフトウェア開発におけるデザインパターン(または設計パターン: design pattern)とは、過去のソフトウェア設計者が発見し編み出した設計ノウハウを蓄積し、名前をつけ、再利用しやすいように特定の規約に従ってカタログ化したものである。

デザインパターンの古典的な例としては、Smalltalkシステムで導入された Model View Controller (MVC) が挙げられる。

書籍『オブジェクト指向における再利用のためのデザインパターン』において、GoF (Gang of Four; 四人組) と呼ばれる4人の共著者は、デザインパターンという用語を初めてソフトウェア開発に導入した。 GoFは、エーリヒ・ガンマリチャード・ヘルムラルフ・ジョンソンジョン・ブリシディースの4人である。

彼らは以下のように述べている

[Design patterns] solve specific design problems and make object-oriented designs more flexiblem elegant, and ultimately reusable. They help designers reuse successful designs by basing new designs on prior experience. A designer who is familiar with such patterns can apply them immediately to design problems without having to rediscover them.

コンピュータプログラミングで、素人達人の間ではびっくりするほどの生産性の差があるのだが、その差はかなりの部分が経験の違いからきている。達人は、さまざまな難局を、何度も何度も耐え忍んで乗り切ってきている。 そのような達人たちが同じ問題に取り組んだ場合、典型的にはみな同じパターンの解決策にたどり着くのだが、これがデザインパターンである。(GoF)

それぞれのパターンは、プログラマの間で何度も繰り返し考え出されてきた。なので、それは最善の解決策ではないかもしれないが、その種の問題に対するトレードオフも考慮した、典型的な解決策ではある。更に、コストのかかるかもしれない問題解決を実際に行う前の先行調査として大変役に立つ。パターンには名前がついていることが重要である。なぜなら、名前がついていることで問題や解決策を記述したり、会話の中で取り上げたりすることができるようになるからである。

GoFによる23のパターン

GoFは彼らの著作『オブジェクト指向における再利用のためのデザインパターン』の中で23種のパターンを取り上げた。

生成に関するパターン

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 パターン 

インスタンスの変化を他のインスタンスから監視できるようにする。Listenerとも呼ばれる。

State パターン 

オブジェクトの状態を変化させることで、処理内容を変えられるようにする。

Strategy パターン 

データ構造に対して適用する一連のアルゴリズムカプセル化し、アルゴリズムの切り替えを容易にする。

Template Method パターン 

あるアルゴリズムの途中経過で必要な処理を抽象メソッドに委ね、その実装を変えることで処理を変えられるようにする。

Visitor パターン 

データ構造を保持するクラスと、それに対して処理を行うクラスを分離する。

SIパターン

マッチング パターン

SQLバッチ パターン

 

株式会社 システムアイ http://www.systemi.co.jp