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デザインパターンに慣れるIterator1 つ 1 つを数え上げる
2Adapterひと皮かぶせて再利用
3サブクラスに任せるTemplate Method具体的な処理をサブクラスに任せる
4Factory Methodインスタンス作成をサブクラスに任せる
5インスタンスを作るSingletonたった 1 つのインスタンス
6Prototypeコピーしてインスタンスを作る
7Builder複雑なインスタンスを組み立てる
8Abstract Factory関連する商品を組み合わせて製品を作る
9分けて考えるBridge機能の階層と実装の階層を分ける
10Strategyアルゴリズムをごっそり入れ替える
11同一視Composite容器と中身の同一視
12Decorator飾り枠と中身の同一視
13構造を渡り歩くVisitor構造を渡り歩きながら仕事をする
14Chain of Responsibility責任のたらい回し
15シンプルにするFacadeシンプルな窓口
16Mediator相手は相談役 1 人だけ
17状態を管理するObserver状態の変化を通知する
18Memento状態を保存する
19State状態をクラスとして表現する
20無駄をなくすFlyweight同じものを共有して無駄をなくす
21Proxy影武者を前面に立たせる
22クラスで表現するCommand命令をクラスにする
23Interpreter文法規則をクラスで表現する
表 GoF のデザインパターン

デザインパターンの一つである Observer パターンを利用すれば,あるオブジェクトの状態が変化したときに,それに依存する全てのオブジェクトに自動的に通知することができる。

ストラテジパターン

デザインパターンの中のストラテジパターンを用いて,帳票出力のクラスを図のとおりに設計した。この設計は,新規フォーマット用のアルゴリズムの追加が容易である。

図 帳票出力のクラス

演習問題

GoF のデザインパターン

ソフトウェアパターンのうち,GoF のデザインパターンの説明はどれか。

  1. Java のパターンとして,引数オブジェクト,オブジェクトの可変性などで構成される。
  2. オブジェクト指向開発のためのパターンであって,生成,構造,振る舞いの三つのカテゴリに分類される。
  3. 構造,分散システム,対話型システム及び適合型システムの四つのカテゴリに分類される。
  4. 抽象度が異なる要素を分割して階層化するための 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 のデザインパターン」を追加

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です