複数のオブジェクトが互いを直接呼び合うと、参照が増えて手がつけられなくなる。この連載では、航空機同士の直接通信が破綻する様子を確かめてから、管制塔に調整を任せる設計に組み替え、Perl と Moo で航空管制シミュレーターを作ります。最終回で「ここまで作ったのが GoF の Mediator パターンだった」と名前がつきます。
このページは目次を兼ねた案内板です。初めてなら「読み方」から、オブジェクト同士の依存が絡み合って困っているなら「困りごとから探す」から選んでください。
対象読者
Perl入学式を卒業した程度の方、または「Mooで覚えるオブジェクト指向プログラミング」シリーズを読了した方を想定しています。
読み方
- 通して読む: 第1回から順に。コードは前の回の続きなので、動かしながら進めるなら順番どおりが確実です
- 依存の絡み合いに困っているなら: 第2回で問題を、第3回で解き方を読めば要点がつかめます
- Mediator パターンの名前と対応表が目的なら: 第8回から読み、気になった所だけ前の回に戻れます
全8回
- 航空管制シミュレーターの最初の一歩。便名を持って離着陸する Aircraft クラスを作る【Moo】
- 2機が同時に着陸したら衝突する。機体同士で直接調整させると参照が増え続ける
- 航空機が互いを知らなくても安全に着陸できる。管制塔クラスに調整を任せる
- 機体の種類が増えても管制塔のコードは変えない。Moo::Role で共通の約束を決める
- 滑走路を使えるのは同時に1機だけ。使用中かの管理を Runway クラスに分ける
- 滑走路が空くのを待つ機体が取り残される。着陸待ちキューで先着順に処理する
- 燃料切れの機体まで順番待ちさせてしまう。緊急機をキューの先頭に回す
- ここまで作ってきた設計の名前は Mediator パターンだった。管制塔の役割を整理する
困りごとから探す
オブジェクト同士が直接呼び合って、数が増えるほど絡まる
種類が増えても、呼び出す側を変えたくない
- 第4回 — Moo::Role の requires で、全機が守るメソッドを決めておく
共有の資源を同時に使わせたくない
- 第5回 — 滑走路の使用中判定、占有、解放を専用クラスに任せる
待たせる順番を決めたい
仕組みに名前をつけて整理したい
- 第8回 — GoF の Mediator パターンの登場人物と、ここまでの実装の対応
関連シリーズ
Observer パターンなど、関連するデザインパターンのシリーズも参考にどうぞ。
