サーバーやケーブルといった要素に監査やログ収集を足すたび、呼び出し側で型を見分けて書き分けている。操作を訪問者のクラスにして、要素のクラスを変えずに新しい操作を足せるようにする(Visitor)。Perl と Moo で実装します。
データベースの中身が配列のままむき出しで、呼び出し側がその構造を前提に走査している。連結リストなどに変わると走査を全部書き直すことになる。走査の手順を部品に閉じ込め、中身の構造を知らなくても順に読めるようにする(Iterator)。Perl と Moo で実装します。
内部状態を外へ出さずに、再起動の前に退避して、あとで元に戻したい。状態を丸ごと複製した保管用のオブジェクトを作り、持つ側には中身を見せないまま戻せるようにする(Memento)。Perl と Moo で実装します。
ジェネレータ、冷却器、バルブ、メインフレームが互いを直接参照し、組み合わせの数だけ依存が増える。やり取りを仲介役に集め、各部品は仲介役だけを知ればよい形にする(Mediator)。Perl と Moo で実装します。
呼び出し側が個別のチェッカーを全部知っているため、チェックを足すたびにゲートを書き換えている。処理を次の担当へ順に渡す連鎖にして、呼び出し側を依存から外す(Chain of Responsibility)。Perl と Moo で実装します。
検知した側が、ブザー、扉、照明を1つずつ呼び出していて、連動させたい対象を足すたびに本体が変わる。変化を通知するだけにし、受け手が自分で反応する形にする(Observer)。Perl と Moo で実装します。
タレットの scan も tick も、現在の状態を調べる巨大な if-else でできている。状態ごとに部品を分け、状態自身に振る舞いと次の遷移を持たせる(State)。Perl と Moo で実装します。
送信元が受け手を直接呼ぶと、実行した操作を記録できず、元に戻すこともできない。操作そのものをオブジェクトにして、履歴を積み、Undo できるようにする(Command)。Perl と Moo で実装します。
どの罠かの条件分岐と、それぞれの防御処理が1つのメソッドに同居し、罠を足すたびに本体を書き換えている。防御の方法を部品に分けて、実行時に差し替えられるようにする(Strategy)。Perl と Moo で実装します。
スキャン、解読、ゲート解放、ログ記録という同じ手順のコードをコピペで量産し、プロトコルが変わるたびに全部直すはめになる。共通の流れを親クラスに置き、違う部分だけをサブクラスに任せる(Template Method)。Perl と Moo で実装します。
同じ種類の敵が、変わらない設定を1体ずつ持つためにメモリが枯渇する。不変の部分を共有し、座標や HP のような個別の値だけを各自が持つ(Flyweight)。Perl と Moo で実装します。
強い電磁場を放つデータ源へ直接つなぐと、権限が足りなければ回路が焼ける。同じ見た目の代理役を間に置き、アクセス制御、必要になるまで生成を遅らせる処理、取得結果のキャッシュを任せる(Proxy)。Perl と Moo で実装します。
複数の部品を正しい順序で呼ぶ知識が呼び出し側に散らばり、順序を間違えると事故になる。手順を窓口に閉じ込め、途中で失敗したときの巻き戻しも持たせる(Facade)。Perl と Moo で実装します。
機能を継承で足すと、暗視と熱感知の組み合わせごとにクラスが増えて爆発する。同じ見た目の部品で包んで機能を重ね、組み合わせを実行時に選べるようにする(Decorator)。Perl と Moo で実装します。
単体のセルと、中に他の要素を含むユニットを型判定で分けると、分岐のスパゲッティになる。同じ呼び方で扱える木構造にして、入れ子の深さを意識しなくて済むようにする(Composite)。Perl と Moo で実装します。