デザインパターン入門

最終改版日:2006.3.23
デザインパターンを“喩え話”で分かり易く理解する。
オブジェクト指向に立脚する優れた設計ノウハウである “デザインパターン”。 喩え話や、クラス設計のポイントだけ記載した、 本格的な勉強の前の入門編。

■目次
  1. 方針
  2. 生成に関するパターン
    Factory Method/ Abstract Factory/ Builder/ Prototype/ Singleton/ Object Pool
  3. 構造に関するパターン
    Proxy/ Composite/ Adaptor/ Iterator/ Faccade/ Flyweight/ Decorator/ Bridge
  4. 振舞いに関するパターン
    Chain of Responsibility/ Command/ Mediator/ Snapshot (memento) / Observer/ State/ Strategy/ Template Method/ Visitor/ Interpreter

◆方針

目次に戻る

◆生成に関するパターン


Factory Method ファクトリー・メソッド
ある製品種を扱う工場で、 具体的にどのスタイルの製品を作るかを指定できる窓口。
同じ種類のモノなら、同じように作れるようにしておけ。
目次に戻る

Abstract Factory アブストラクト・ファクトリー
同じ「一揃いの製品群」を、違う「スタイル」で作る複数の工場を、 自由に選べるようにする。
同じ種類のモノ一式なら、同じように作れるようにしておけ。
目次に戻る

Builder ビルダー
製品の複雑な作り方を利用者から隠す。
個々の「部品の作り方」と、部品を組み立てる「作業の流れ」は、分けておけ。
目次に戻る

Prototype プロトタイプ
いつでも使える複製方法を提供する。
最初からでなく、苦労して色々いじった結果を、増殖できるようにしておけ。
目次に戻る

Singleton シングルトン
実物が一つだけしか生成されないことを保証する。
一つだけ必要なモノは、一つしか作れないようにしておけ。
目次に戻る

Object Pool オブジェクト・プール
オブジェクトを 取っておいて、必要に応じて使いまわす。
作るのが大変なものは、使い終わっても捨てずにとっておけ。
目次に戻る

◆構造に関するパターン


Composite コンポジット
「親は一人、子供は複数」という決まりで、 木構造を作る。
「束ねる側」と「束ねられる側」の共通部分は纏めておけ。
目次に戻る

Adaptor アダプター
利用者が知らない機能を呼び出してくれる窓口。
「既に知っているモノ」を拡張して、「知らないモノ」を利用できるようにしておけ。

目次に戻る

Iterator イテレータ
オブジェクトに順々にアクセスする。
複雑な構造のモノの集まりでも、一個一個、順番に取り出せるようにしておけ。
目次に戻る

Faccade ファサード
汚いものに綺麗なフタをする。
複雑なモノは、簡単に利用できるようにしておけ。
目次に戻る

Flyweight フライウェイト
同じオブジェクトがワラワラ出来るのを防ぐ。
繰り返し使われると分かっているモノは、一回しか作らないようにしておけ。
目次に戻る

Decorator デコレータ
ある機能に、基本的な使い勝手は変えずに 装飾を加えていく方法を提供する。
既に存在するモノをいじらずに、機能を拡張できるようにしておけ。
目次に戻る

Proxy プロキシ
実装方法の実体を利用者から隠す
利用者に分からないように、処理の呼び出し方を調整できるようにしておけ。
目次に戻る

Bridge ブリッジ
実装方法と機能を別々に拡張できるようにする。
「何をするか」と「どう実現するか」は、分けておけ。
目次に戻る

◆振舞いに関するパターン


Chain of Responsibility チェイン・オブ・レスポンシビリティ
依頼された処理をたらい回しする。
既に存在する機能に、簡単に機能を追加できるようにしておけ。
目次に戻る

Command コマンド
命令書をキューに溜めて、一つ一つ取り出して処理する。
「要求内容」と、「要求の処理」は、分けておけ。
目次に戻る

Mediator メディエータ
各々が勝手に機能を呼び合うのでなく、 必ず媒介者(仲人)を通して通信するようにする。
個々に勝手に通信先と話をせず、仲介人に通知先を判断してもらうようにしておけ。
目次に戻る

Snapshot スナップショット
ある瞬間の状態を保存する。後でその状態に戻せる。
状態の「保存・復旧処理」と、保存された状態の「履歴・世代管理」は、分けておけ。
目次に戻る

Observer オブザーバー
ある物の状態の変化を、関係する全員に通知する。
一貫性を保てるよう、変化が起きたら全員に通知できるようにしておけ。
目次に戻る

State ステート
個々の状態と、その状態に対する動作を、クラスとして表わす。
状態ごとに、各種イベントに対する「処理内容」と、「処理後の状態」を、纏めておけ。
目次に戻る

Strategy ストラテジー
対象に応じたアルゴリズムが実行されるようにする。
相手によって適切な処理が選ばれるようにしておけ。
目次に戻る

Template Method テンプレート・メソッド
大筋のアルゴリズムを定義しておき、詳細ロジックはサブクラスの実装に委ねる。
不変の大まかな「処理の流れ」と、良く変わる細部の「処理」は、分けておけ。
目次に戻る

Visitor ビジター
オブジェクト構造の中を巡回し、 個々の要素の型に応じて適切な処理を行う。
複雑なモノの集まりに対して、将来、新しい観点での巡回が出来るようにしておけ。
目次に戻る

Interpreter インタープリタ
言語の文法構造を木構造で表現する。
「対象」と「対象間の関係」の共通部分は纏めておけ。
目次に戻る

◆参考文献