デザインパターン(GoF)とは(全体像)
デザインパターンとは、プログラムの設計で「よく出てくる問題」に対する、定番の解決の型(やり方)を集めたものだ。
そのうち有名なのが、GoF(ゴフ)のデザインパターン。GoFは「Gang of Four(ギャング・オブ・フォー=4人組)」の略で、4人の研究者がまとめたものを指す。全部で23個のパターンが整理されている。
ねらいは、先人の知恵を再利用すること。同じような設計のなやみは、過去にだれかが解いている。その定番の型を使えば、いちから考えずにすみ、直しやすい設計になる。要するに、設計の「お手本集」だ。
詳しく:3系統と「万能ではない」
ここが心臓部。23個のパターンは、3つの系統に分かれる。表で押さえよう。
GoFパターンの3系統
| 系統 | 何についての型か |
|---|---|
| 生成 | オブジェクト(部品)の「作り方」についての型 |
| 構造 | 部品どうしの「組み立て方」についての型 |
| 振舞い | 部品どうしの「連携のしかた」についての型 |
「作り方」「組み立て方」「連携のしかた」という、設計の3つの角度で整理されている、と覚えるとよい。代表的なものに、1つだけ作る型(シングルトン)や、作り方をまとめる型(ファクトリ)などがある。名前を全部覚える必要はなく、3系統で整理されていることをまず押さえよう。
ここで注意点が2つ。
1つ目。GoFのパターンが「設計の型のすべて」ではない。GoFは23個だが、ほかにもいろいろなパターンがある。「GoFがすべて」と思い込むと誤りだ。
2つ目。デザインパターンは、必ず使うものではない。場面に合わないのに無理に当てはめると、かえって複雑になる。合う場面で使うのがコツ。「いつも必ず使うべき」と思い込むのも誤りだ。
わかりやすく言い換えると
身近なたとえで整理しよう。
デザインパターンは、「料理の定番レシピ集」のイメージ。よくある料理(よくある設計のなやみ)には、うまくいく定番の作り方がある。それを集めたものだ。
3系統は、「作り方・組み立て方・連携のしかた」という3つの角度。つまり、設計のどの場面の型か、で分けてある。
「必ず使うべき」というのは思い込み。合う場面で選んで使うのであって、つまり、レシピは必要なときに開けばよい、ということだ。
試験のツボ
🔴 一番出る:デザインパターンの正体
①よく出る設計の問題への、定番の解決の型を集めたもの
②GoF(4人組)がまとめた23個が有名
🔴 次に出る:23個・3系統
①全部で23個のパターン
②生成・構造・振舞いの3系統に分かれる
🟡 押さえると安定:万能ではない
①GoFがすべてではない(ほかのパターンもある)
②必ず使うのではなく、合う場面で使う
よくある間違い
①「GoFの23個が、設計の型のすべてだ」→ ✗ GoFは23個だが、ほかにもパターンはある。すべてではない。
②「デザインパターンは、どんなときも必ず使うべきだ」→ ✗ 合わない場面で無理に使うと複雑になる。合う場面で選んで使う。
③「デザインパターンは、特定の言語でしか使えない命令だ」→ ✗ パターンは設計の考え方(型)。言語に縛られる命令ではない。
試験での出題パターン
実際の問題でたしかめてみよう。
オリジナル問題1(デザインパターンの正体)
デザインパターン(GoF)に関する次の記述のうち、最も適切なものはどれか。
- 社員の出退勤を記録して、毎月の給与を計算するためのしくみである
- 取引先へ毎月の請求書を郵送する、決まった事務作業のことを指す
- 完成したシステムを宣伝して、より多く売るための広告活動である
- よく出る設計の問題に対する、定番の解決の型を集めたものである
解答は 4 だよ。
デザインパターンは、よく出る設計の問題への、定番の解決の型を集めたものだよ。設計のお手本集だね。
選択肢1は給与計算、選択肢2は請求書の事務、選択肢3は広告で、どれも違うよ。
| 選択肢 | 判定 | 理由 |
|---|---|---|
| 1 | ✗ | 給与計算のしくみではない |
| 2 | ✗ | 請求書の事務の話 |
| 3 | ✗ | 広告活動ではない |
| 4 | ✓ | 定番の解決の型を集めたもので正しい |
オリジナル問題2(23個・3系統)
GoFのデザインパターンの構成として、最も適切なものはどれか。
- 23個のパターンが、生成・構造・振舞いの3系統に分かれている
- 朝・昼・夜という、1日の3つの時間帯ごとに分かれているものだ
- 北・南・西という、3つの方角ごとに分かれているものだとされる
- 売上・費用・利益という、決算で使う3つの数字に分かれている
解答は 1 だよ。
GoFのパターンは、23個が、生成・構造・振舞いの3系統に分かれているよ。作り方・組み立て方・連携のしかた、の3つだね。
選択肢2の時間帯、選択肢3の方角、選択肢4の決算の数字は、いずれも誤りだよ。
| 選択肢 | 判定 | 理由 |
|---|---|---|
| 1 | ✓ | 23個・生成構造振舞いの3系統で正しい |
| 2 | ✗ | 時間帯のことではない |
| 3 | ✗ | 方角のことではない |
| 4 | ✗ | 決算の数字ではない |
オリジナル問題3(万能ではない)
デザインパターンの使い方に関する次の記述のうち、最も適切なものはどれか。
- どんなときも必ず使うべきもので、使わない設計は誤りだとされている
- 社員の給与を計算するときだけに使う、経理専用の型のことである
- すべての場面で使うのではなく、合う場面を選んで使うものである
- 取引先へ請求書を郵送する事務のときだけに使う型のことである
解答は 3 だよ。
デザインパターンは、すべての場面で使うのではなく、合う場面を選んで使うものだよ。無理に当てはめると、かえって複雑になるんだ。
選択肢1の「必ず使うべき」、選択肢2の給与計算、選択肢4の請求書の事務は、いずれも誤りだよ。
| 選択肢 | 判定 | 理由 |
|---|---|---|
| 1 | ✗ | 必ず使うものではない |
| 2 | ✗ | 給与計算専用ではない |
| 3 | ✓ | 合う場面を選んで使うで正しい |
| 4 | ✗ | 請求書の事務専用ではない |
まとめ
押さえどころ
- 🔴 デザインパターン(GoF) = よく出る設計の問題への、定番の解決の型を集めたもの。GoF(4人組)がまとめた23個が有名。
- 🔴 23個・3系統 = 生成(作り方)・構造(組み立て方)・振舞い(連携のしかた)。
- 🟡 万能ではない = GoFがすべてではない。必ず使うのではなく、合う場面で使う。
次に学ぶ
- オブジェクト指向 ── データと処理をまとめる考え方。デザインパターンは、その設計の定番の型。
執筆: SikakuQuest編集部