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 | 文法規則をクラスで表現する |
デザインパターンの一つである Observer パターンを利用すれば,あるオブジェクトの状態が変化したときに,それに依存する全てのオブジェクトに自動的に通知することができる。
ストラテジパターン
デザインパターンの中のストラテジパターンを用いて,帳票出力のクラスを図のとおりに設計した。この設計は,新規フォーマット用のアルゴリズムの追加が容易である。
演習問題
GoF のデザインパターン
ソフトウェアパターンのうち,GoF のデザインパターンの説明はどれか。
- Java のパターンとして,引数オブジェクト,オブジェクトの可変性などで構成される。
- オブジェクト指向開発のためのパターンであって,生成,構造,振る舞いの三つのカテゴリに分類される。
- 構造,分散システム,対話型システム及び適合型システムの四つのカテゴリに分類される。
- 抽象度が異なる要素を分割して階層化するための Layers,コンポーネント分割のための Broker などで構成される。
解答と解説
正解は 2. である。
GoF のデザインパターンは,オブジェクトの生成に関するパターン,オブジェクトの構造に関するパターン,オブジェクトの振る舞いに関するパターンの三つに分類される。
参考文献
- 平澤 章,「オブジェクト指向でなぜつくるのか 知っておきたいプログラミング,UML,設計の基礎知識」,日経 BP 社,2004年6月7日
更新履歴
- 2023年2月11日 新規作成
- 2023年2月19日 デザインパターン,ストラテジパターンの説明を追加
- 2024年4月29日 アフェリエイトを更新
- 2024年5月19日 Observer パターンの説明を追加
- 2024年10月19日 「オブジェクト指向における再利用のためのデザインパターン」の楽天アフェリエイトを追加,演習問題「GoF のデザインパターン」を追加