GoF のデザインパターン
デザインパターンとは,典型的な課題に対する効果的な設計パターンのことで,代表的なデザインパターンに,GoF (Gang of Four) がある。四人の男性が持ち寄ったデザインパターンを体系化したことから,こう呼ばれる。
23 種類のデザインパターンからなり,それらは,オブジェクトの生成に関するパターン,オブジェクトの構造に関するパターン,オブジェクトの振る舞いに関するパターンの三つに分類される。
デザインパターンのはじまり
デザインパターンが一般的に知られるようになったのは,その名も「オブジェクト指向における再利用のためのデザインパターン」(原題 “Design Patterns: Elements of Reusable Object-Oriented Software”)というタイトルの書籍が 1995 年に発刊されたことがきっかけである。
この書籍は,エリック・ガンマ (Erich Gamma) 氏,リチャード・ヘルム (Richard Helm) 氏,ラルフ・ジョンソン (Ralph E. Johnson) 氏,ジョン・ブリシデス (John M. Vlissides) 氏という 4 名の技術者によって共同で書かれた。
この 4 名の技術者は,親しみを込めて GoF(Gang of Four)と呼ばれており,彼らが発表した 23 種類のデザインパターンは「GoF のデザインパターン」と呼ばれている。
デザインパターン
デザインパターンは,変更に強く問題が起きにくいプログラムを作成するために,クラス構造や機能をパターン化した「設計のひな形」である。オブジェクト指向におけるデザインパターンは,システムの構造や機能について,典型的な設計上の問題とその解決策を示し,再利用できるようにしたものである。
GoF のデザインパターン
GoF のデザインパターンは,典型的に現れる課題に対して,3 ~ 5 つ程度のクラスを組み上げて作る解法を示すもので,課題と解決策,適用した場合の効果と考慮点がまとめられ,UML の図やサンプルコードも一覧に示される。
GoF のデザインパターンの一覧を示す。
No. | カテゴリ | パターン名 | 目的 |
---|---|---|---|
1 | デザインパターンに慣れる | Iterator | 1 つ 1 つを数え上げる |
2 | Adapter | ひと皮かぶせて再利用 | |
3 | サブクラスに任せる | Template Method | 具体的な処理をサブクラスに任せる |
4 | Factory Method | インスタンス作成をサブクラスに任せる | |
5 | インスタンスを作る | Singleton | たった 1 つのインスタンス |
6 | Prototype | コピーしてインスタンスを作る | |
7 | Builder | 複雑なインスタンスを組み立てる | |
8 | Abstract Factory | 関連する商品を組み合わせて製品を作る | |
9 | 分けて考える | Bridge | 機能の階層と実装の階層を分ける |
10 | Strategy | アルゴリズムをごっそり入れ替える | |
11 | 同一視 | Composite | 容器と中身の同一視 |
12 | Decorator | 飾り枠と中身の同一視 | |
13 | 構造を渡り歩く | Visitor | 構造を渡り歩きながら仕事をする |
14 | Chain of Responsibility | 責任のたらい回し | |
15 | シンプルにする | Facade | シンプルな窓口 |
16 | Mediator | 相手は相談役 1 人だけ | |
17 | 状態を管理する | Observer | 状態の変化を通知する |
18 | Memento | 状態を保存する | |
19 | State | 状態をクラスとして表現する | |
20 | 無駄をなくす | Flyweight | 同じものを共有して無駄をなくす |
21 | Proxy | 影武者を前面に立たせる | |
22 | クラスで表現する | Command | 命令をクラスにする |
23 | Interpreter | 文法規則をクラスで表現する |
ストラテジパターン
デザインパターンの中のストラテジパターンを用いて,帳票出力のクラスを図のとおりに設計した。この設計は,新規フォーマット用のアルゴリズムの追加が容易である。

参考文献
- 平澤 章,「オブジェクト指向でなぜつくるのか 知っておきたいプログラミング,UML,設計の基礎知識」,日経 BP 社,2004年6月7日
更新履歴
- 2023年2月11日 新規作成
- 2023年2月19日 デザインパターン,ストラテジパターンの説明を追加