「デザインパターン」と聞くと身構えてしまうかもしれませんが、要するに先輩エンジニアたちが残した「設計のレシピ集」です。
試験では23種類すべてを暗記する必要はなく、分類と代表例を押さえれば得点できます。
対象試験と出題頻度
デザインパターン(GoF)は、応用情報技術者試験で出題されるテーマです。
オブジェクト指向設計の文脈で「23種類のパターンが生成・構造・振る舞いの3つに分類される」という基本知識と、Singleton・Observer・Factory Methodなど代表的なパターンの役割を区別できるかが問われます。
関連するUMLのクラス図とセットで覚えておくと理解が早まります。
詳細をクリックして確認
応用情報技術者
★★☆☆☆
ランクC(応用)余裕があれば覚える
用語の定義
情報処理試験を勉強していると、「デザインパターンって結局何のこと?種類が多すぎて覚えきれない…」と混乱しがちです。
デザインパターン(GoFのデザインパターン)とは、一言で言うと
「オブジェクト指向設計で繰り返し現れる課題に対して、再利用可能な解決策をカタログ化した23種類の定石」
のことです。
イメージとしては、「料理のレシピ集」です。
カレーを作るとき、毎回ゼロから「どうやって肉を煮込むか」を考える人はいません。
先人が残した「カレーの作り方」というレシピに沿えば、誰でも一定品質の料理が作れます。
デザインパターンも同じで、「クラスをどう設計すればよくある問題を回避できるか」をレシピのように整理したものです。
1994年にErich Gamma、Richard Helm、Ralph Johnson、John Vlissidesの4人(通称Gang of Four=GoF)が書籍『Design Patterns』にまとめたため、「GoFのデザインパターン」と呼ばれています。
📊 デザインパターン(GoF)の基本情報
| 項目 | 内容 |
|---|---|
| 英語名 | Design Patterns (Gang of Four) |
| 提唱者 | Gang of Four(GoF):Gamma, Helm, Johnson, Vlissides |
| 提唱年 | 1994年(書籍『Design Patterns』) |
| パターン総数 | 23種類 |
| 分類 | 生成(Creational)/構造(Structural)/振る舞い(Behavioral) |
解説
同じような設計上の悩みは、世界中の開発現場で繰り返し発生していました。
「インスタンスを1つしか作りたくない」「異なるクラスのオブジェクトを共通の手順で扱いたい」といった課題は、誰もが一度はぶつかる壁です。
毎回ゼロから設計し直すのは非効率なので、典型的な解法に名前をつけて共有しよう。
これがGoFが整理した動機です。名前があることで、エンジニア同士が「ここはSingletonで」と一言で意図を伝えられるようになります。
3つのカテゴリ
23パターンは目的別に3つのグループに分かれます。試験対策としてはまずこの分類を頭に入れることが最優先です。
| カテゴリ | 数 | 何を扱うか |
|---|---|---|
| 生成 Creational |
5種 | オブジェクトの作り方を工夫するパターン。「new」を直接使わず、生成の責任を別に切り出して柔軟性を高める |
| 構造 Structural |
7種 | クラスやオブジェクトの組み合わせ方に関するパターン。既存のクラスを組み合わせて新しい機能を作る |
| 振る舞い Behavioral |
11種 | オブジェクト間の責任分担や処理の流れに関するパターン。誰がどの処理を担当するかを整理する |
図解:23パターンの全体像
GoFデザインパターン 23種類マップ
🏭 生成(5種)
- Abstract Factory
- Builder
- Factory Method
- Prototype
- Singleton
🧱 構造(7種)
- Adapter
- Bridge
- Composite
- Decorator
- Facade
- Flyweight
- Proxy
🔄 振る舞い(11種)
- Chain of Responsibility
- Command
- Interpreter
- Iterator
- Mediator
- Memento
- Observer
- State
- Strategy
- Template Method
- Visitor
▲ 太字は試験で名前がよく登場するパターン
代表的なパターン5選
23種類すべての詳細暗記は不要です。試験で名前と概要が問われやすい代表パターンを押さえれば十分です。
| パターン名 | 日本語読み | 分類 | 役割(一言) |
|---|---|---|---|
| Singleton | シングルトン | 生成 | クラスのインスタンスがシステム全体で1つだけ存在することを保証する |
| Factory Method | ファクトリ メソッド |
生成 | インスタンス生成の手続きをサブクラスに任せ、どのクラスを作るかの判断を切り離す |
| Adapter | アダプタ | 構造 | 互換性のないインタフェースを変換して、既存クラスを別のクラスから利用できるようにする |
| Observer | オブザーバ | 振る舞い | あるオブジェクトの状態が変わったとき、依存する複数のオブジェクトに自動通知する |
| Strategy | ストラテジ | 振る舞い | アルゴリズムを切り替え可能な部品としてカプセル化し、実行時に差し替える |
図解:Observerパターンのイメージ
振る舞い系の代表として、Observer(観察者)パターンの構造を可視化します。
新聞の購読モデルに似ており、「発行元」が更新されると「購読者」全員に通知が飛びます。
Observerパターンの仕組み
Subject
(観察される側)
例:株価データ
notify()
───▶
状態変化を通知
Observer A
グラフ表示
Observer B
アラート発火
Observer C
ログ記録
※ Subject側は観察者の具体的な処理内容を知らなくていい(疎結合)
Singletonの実装イメージ(Java)
生成系の代表Singletonを、Javaの最小コードで示します。
コンストラクタをprivateにしてnewを禁止し、唯一の取得口getInstance()を経由させるのが核心です。
public class ConfigManager {
// 唯一のインスタンスを保持
private static ConfigManager instance;
// 外部からの new を禁止
private ConfigManager() { }
// 唯一の取得口
public static ConfigManager getInstance() {
if (instance == null) {
instance = new ConfigManager();
}
return instance;
}
}
では、この用語が試験でどのように出題されるか見ていきましょう。
💡 デザインパターン(GoF)の核心を3行で
・オブジェクト指向設計の典型課題に対する23種類の解法カタログ
・「生成5種・構造7種・振る舞い11種」の3カテゴリに分類される
・Singleton/Factory Method/Adapter/Observer/Strategyあたりが代表格
試験ではこう出る!
応用情報技術者試験では、デザインパターンは「用語の定義を選ばせる問題」と「分類カテゴリを選ばせる問題」の2系統で繰り返し出題されています。深い実装知識は問われません。
📊 過去問での出題実績
| 試験回 | 出題内容 | 問われたポイント |
|---|---|---|
| SA R4春 午前Ⅱ 問2 |
GoFのデザインパターンの説明として正しいものを選ぶ問題。 | ・正解:「生成・構造・振る舞いの3カテゴリに分類」 ・ひっかけ:POSAのLayers/Brokerなど |
| SC R6秋 午前Ⅱ 問22 |
SA R4春問2と同一構成(流用)。 | ・高度区分でも基本知識として繰り返し出題 ・選択肢の文言もほぼ同一 |
| SW H19秋 午前 問37 |
「設計上の課題を解決するために繰り返し用いるオブジェクトやクラスの構造」を選ぶ問題。 | ・正解:「デザインパターン」 ・ひっかけ:イディオム/フレームワーク/モデリング |
| SA H29秋 午前Ⅱ 問5 |
SA R4春問2と同一系統の問題(流用)。 | ・GoFは「3カテゴリ・23種」で覚える鉄則 |
📝 IPA試験での出題パターン
パターン1:「GoFのデザインパターンの説明を選べ」
「オブジェクト指向開発のためのパターンとして生成・構造・振る舞いの3カテゴリに分類される」が正解の鉄板表現。ひっかけとしてPOSA(Pattern-Oriented Software Architecture)の「Layers/Broker/4カテゴリ」が混ざるので、「3カテゴリ=GoF」「4カテゴリ=POSA」で覚える。
パターン2:「デザインパターンとは何かを選べ」
SW H19秋のように、用語そのものの定義を問う形式。「繰り返し現れる設計課題に対する再利用可能な解法」がキーワード。混同しやすい「フレームワーク(再利用可能な枠組み)」「イディオム(言語特有の慣用表現)」との区別を押さえる。
頻出キーワード:「Gang of Four」「23種」「生成・構造・振る舞い」「オブジェクト指向」。Singleton・Observer・Factory Methodなど個別パターン名は応用情報の午前問題ではほぼ問われないので、深追いは不要です。
【確認テスト】理解度チェック
ここまでの内容を理解できたか、簡単なクイズで確認してみましょう。
Q. ソフトウェアパターンのうち、GoFのデザインパターンの説明として最も適切なものはどれでしょうか?
- A. 抽象度が異なる要素を分割して階層化するためのLayers、コンポーネント分割のためのBrokerなど、構造・分散システム・対話型システム・適合型システムの4カテゴリで構成される。
- B. システム開発における再利用を目的に、汎用的な処理の枠組みをライブラリとしてあらかじめ提供するもので、利用者は枠組みに沿って差分のみを実装する。
- C. オブジェクト指向開発で繰り返し現れる設計課題への解法を、生成・構造・振る舞いの3カテゴリに分類した23種類のパターンとしてカタログ化したもの。
正解と解説を見る
正解:C
解説:
GoFのデザインパターンは、Gang of Fourが書籍『Design Patterns』で整理した23のパターン集で、目的別に「生成・構造・振る舞い」の3カテゴリに分類されます。SA R4春 午前Ⅱ問2やSC R6秋 午前Ⅱ問22で同じ表現の選択肢が正解として出題されています。
選択肢AはPOSA(Pattern-Oriented Software Architecture)の説明です。LayersやBrokerは分散・対話型システム向けのアーキテクチャパターンで、GoFとは別系統です。選択肢Bはフレームワークの説明です。フレームワークは「コードの再利用可能な枠組み」であり、「設計の再利用可能な解法カタログ」であるデザインパターンとは概念のレイヤーが異なります。
よくある質問(FAQ)
Q. デザインパターンとフレームワークは何が違うのですか?
抽象度のレイヤーが違います。デザインパターンは「設計のアイデア」であり、コードそのものではなく、図と説明文で表される設計の型です。一方フレームワーク(Spring、Reactなど)は実行可能なコードの集合体で、開発者はその枠組みに沿って自分のロジックを埋め込みます。「設計の再利用=デザインパターン」「コードの再利用=フレームワーク」と覚えると区別しやすくなります。
Q. POSAのアーキテクチャパターンとは何ですか?
POSA(Pattern-Oriented Software Architecture)は、Buschmannらが整理した「より大きな粒度」のパターン集です。クラス単位の設計を扱うGoFに対し、POSAはシステム全体の構造(Layers=階層化、Broker=コンポーネント間仲介など)を扱います。試験では「4カテゴリに分類」「Layers」「Broker」というキーワードが出てきたらPOSA、「3カテゴリ」「23種」ならGoFと判断できます。
Q. 23種類すべて覚える必要がありますか?
応用情報の午前レベルでは不要です。「3カテゴリ・23種・GoFが提唱」さえ押さえれば多くの問題に対応できます。実務でコードを書くときに頻出するのはSingleton、Factory Method、Adapter、Observer、Strategy、Decoratorあたりです。試験対策と実務理解を兼ねて、この6つだけ目を通しておけば十分です。
Q. デザインパターンを使うデメリットはありますか?
あります。パターン適用には抽象クラスやインタフェースの追加が伴うため、単純な処理であってもクラス数が増えてコードが冗長になります。また、メンバー全員がパターンの語彙を知らないと「Strategyで実装した」と言われても通じず、逆にコミュニケーションコストが上がります。「課題を感じてから適用する」のが鉄則で、覚えたから無理に使うのは設計の悪化を招きます。
Q. MVCはGoFのデザインパターンに含まれますか?
含まれません。MVC(Model-View-Controller)はGoFの23パターンより前から存在するアーキテクチャパターンで、システム全体の構造を扱います。GoFはあくまでクラス・オブジェクトレベルの設計パターンに焦点を当てており、MVCはその上位レイヤーに位置します。試験で「MVCはGoFの一つ」という選択肢があれば誤りと判断してください。