【デザインパターン】デザインパターンの分類 ~目次~

■ はじめに

GOF の デザインパターン についての目次。

目次

【1】オブジェクトの生成に関するパターン
 1)Singleton(一人っ子)
 2)Factory Method(工場メソッド)
 3)Abstract Factory(抽象的な工場)
 4)Builder(構築者)
 5)Prototype(原型)

【2】プログラムの構造に関するパターン
 6)Composite(合成物, 複合物)
 7)Adapter(接続装置)
 8)Facade(見かけ)
 9)Proxy(代理人)
 10)Bridge(橋)
 11)Decorator(装飾者)
 12)Flyweight(軽量級)

【3】オブジェクトの振る舞いに関するパターン
 13)Template Method(ひな型メソッド)
 14)Iterator(繰り返し)
 15)Command(命令)
 16)State(状態)
 17)Observer(観察者)
 18)Strategy(戦略)
 19)Mediator(調停者)
 20)Chain of Responsibility(責任の連鎖)
 21)Visitor(訪問者)
 22)Memento (形見)
 23)Interpreter(通訳)

 【1】オブジェクトの生成に関するパターン

 1)Singleton(一人っ子)

 * システム内に存在するオブジェクトが1つであることを保証する。

 使用頻度

★★★

 個人的なメモ

 * これはもうOK

 関連記事
* C# * VB

 2)Factory Method(工場メソッド)

 * インターフェースを利用することで、
 直接具象クラスを明示してオブジェクト生成を行う必要をなくす。

 使用頻度

★★★

 関連記事
* C#

 3)Abstract Factory(抽象的な工場)

 * 関連するオブジェクトの生成方法をグループ化し、
 具体的なオブジェクトを特定せずに
   生成するためのインターフェースを提供する。

 使用頻度

★★★

 関連記事
* Java

4)Builder(構築者)

 * オブジェクトの生成処理を担当するクラスを作成し、
 様々な生成処理を行えるようにする。

 使用頻度

★☆☆

 関連記事
* Java

5)Prototype(原型)

 * サンプルをコピーして生成したオブジェクトをクライアントに提供する。

 使用頻度

★★☆

 関連記事
* C# * Java

 【2】プログラムの構造に関するパターン

6)Composite(合成物, 複合物)

 * 集団を表現するオブジェクトと要素を
 表現するオブジェクトを同じように扱えるようにする。

 使用頻度

★★☆

 関連記事
* Java

7)Adapter(接続装置)

 * インターフェースの変換を行うことによって、
 互換性のないクラスを利用できるようにする。

 使用頻度

★★☆

 関連記事
* C# * Java

 8)Facade(見かけ)

 * サブシステムへの統合されたインターフェースを
 提供することによって、サブシステムの利用方法を簡素化する。

 使用頻度

★★☆

 関連記事

 9)Proxy(代理人)

 * WebサーバーやDBサーバーなどにアクセスする
 プログラムを開発するときの便宜を図る。

 使用頻度

★★☆

 関連記事

 10)Bridge(橋)

 * 象的なインターフェースを2つに分割し、
 それぞれを自由に変更できるようにする。

 使用頻度

★☆☆

 関連記事
* Java

 11)Decorator(装飾者)

 * オブジェクトに動的に機能を追加するための構造を提供する。
 * サブクラス化による機能追加より柔軟な方法である。

 使用頻度

★★☆

 個人的なメモ

 * 物にしたい(応用もききそう)

 関連記事
* Java

 12)Flyweight(軽量級)

 * 細粒度のオブジェクトを共有することで、
 オブジェクトの格納コストを減少させる。
 * 共有されるオブジェクトは使用状況に依存してはならない。

 使用頻度

★☆☆

 関連しているデザインパターン

 * Singleton

 個人的なメモ

 * 難しくない。(すぐに物にできそう)

 関連記事
* Java

【3】オブジェクトの振る舞いに関するパターン

 13)Template Method(ひな型メソッド)

 * スーパークラスのメソッドで手順を決めておき、
 順番に呼び出されているメソッドについては、
   実装をサブクラスに任せることにする。

 使用頻度

★★★

 個人的なメモ

 * 難しくない。(すぐに物にできそう)

 関連記事
Java
https://dk521123.hatenablog.com/entry/2014/02/13/000100

 14)Iterator(繰り返し)

 * 集約オブジェクト内の個々のオブジェクトに
 アクセスするための統一化された手段を提供する。

 使用頻度

★★★

15)Command(命令)

 * クライアントからの要求をオブジェクトを用いてカプセル化する。
 * 何かを行うタイミングはわかるが、
 具体的な処理内容がわからないときに使用する。

 使用頻度

★★☆

 関連記事

16)State(状態)

 * 各状態における振る舞いを記述した状態オブジェクトを導入する。
 * 状態によって変化する振る舞いをクラス内に記述する必要がなくなり、
   状態オブジェクトに処理を任せることができるようになる。

 使用頻度

★★☆

 関連記事
* Java

 17)Observer(観察者)

 * あるオブジェクトが状態を変えたときに、
 そのオブジェクトに依存するオブジェクトに
 自動的に状態変更が通知され、
 その依存オブジェクトが更新されるまでの仕組みを提供する。

 使用頻度

★★☆

 関連記事
* C# * Java

 18)Strategy(戦略)

 * アルゴリズムの集合を定義して実装をカプセル化しておき、
   クライアント側に影響を与えずにアルゴリズムを
 変更・交換できるようにする。

 使用頻度

★★☆

 関連記事
* C#

 19)Mediator(調停者)

 * オブジェクト間の複雑な協調関係を
 集中管理するオブジェクトを定義する。
 * これによりオブジェクト同士の結合度を弱め、
 柔軟性を保つことができる。

 使用頻度

★☆☆

 関連記事
https://dk521123.hatenablog.com/entry/2011/04/14/011448

 20)Chain of Responsibility(責任の連鎖)

 * クライアントからの要求を処理できるオブジェクトをチェーンでつなぎ、
   そのチェーン中の任意のオブジェクトが要求を処理するようにする。

 使用頻度

★☆☆

 関連記事
* Java

 21)Visitor(訪問者)

 * クラスの要素を変更せずに、新しい操作を定義できるようにする。

 使用頻度

★☆☆

 関連記事
* C#

 22)Memento (形見)

 * カプセル化を侵害しない方法でオブジェクトの内部状態を保存し、
 後でその状態に戻れるようにする。

 使用頻度

★☆☆

 関連記事
* Java

 23)Interpreter(通訳)

 * 言語の文法をオブジェクトで表現し、
 そのオブジェクトを用いてその言語の文を解釈する。

 使用頻度

★☆☆

 ■ 個人的なメモ

 未着手

* Iterator(繰り返し)
* Interpreter(通訳) 

 参考文献

http://itpro.nikkeibp.co.jp/article/COLUMN/20051123/225074/
http://d.hatena.ne.jp/ActionScript/20091127/gof_23_design_pattern