注文ごとにメニューの名前や価格をまるごとコピーしていて、件数に比例してメモリが増え、混む時間帯に止まる。変わらない部分を1つのオブジェクトにして共有する(Flyweight)。
ツリー構造のデータを parent_id 付きのフラットな配列で持っていたら、階層を1段深くしただけで集計が壊れた。部品と入れ物に同じメソッドを持たせ、再帰で集計する(Composite)。
ログや通知を足すたびに 200 行の承認処理を直接書き換え、フラグの組み合わせで分岐が膨らむ。本体には触れず、機能ごとのクラスで外側から包んで足していく(Decorator)。
レポートの部署と出力形式の組み合わせごとに if 分岐が増え、片方を直すともう片方が壊れる。2つの軸を別々のクラスに分け、実行時に組み合わせる(Bridge)。
照明・カーテン・プロジェクターなど複数の機器を、決まった順に呼ばないと誤作動する。呼び出し順と初期化を1つのクラスに閉じ込め、利用側はメソッド1つで済ませる(Facade)。
古い Perl スクリプトを Web から JSON で呼べるようにしたいが、既存ロジックは壊せない。元のコードには手を入れず、新しい口から古いメソッドへ呼び出しとデータ形式を変換するクラスを挟む(Adapter)。
17 種類のテンプレートがそれぞれ全項目を書いて new していて、1 項目の追加で 17 か所を手直しし、漏れた所が壊れた。共通の原型を深いコピーで複製し、違う部分だけ上書きする(Prototype)。
50 か所にコピペしたテストデータをスキーマ変更で手直しし、2 か所漏れてテストは緑のまま本番障害に。既定値を1か所に集め、テストごとの差分だけを指定して組み立てる(Builder)。
レポートの出力形式を3つ目に増やしたら、PDF のフッターが消え HTML に Markdown の記号が混じった。形式ごとの部品を工場単位でそろえて作り、混ざらないようにする(Abstract Factory)。
外部サービスの連携先を足すたびに if-elsif が伸び、関係ない連携まで壊れる。オブジェクトの生成を工場クラスに集め、メインロジックから分岐を消す(Factory Method)。Perl と Moo で実装します。
設定モジュールをあちこちで new すると、重い初期化が毎回走り、読み込んだタイミングで値まで食い違う。Perl の state 変数でインスタンスを1つに保つ(Singleton)。
正規表現を解読・可視化・最適化するツールを作りながら、Interpreter・Visitor・Compositeの3パターンを実践。Mooで書くPerlデザインパターン入門。
ウイスキーのテイスティングカードを生成しながら、Abstract Factory・Flyweight・Prototypeの3パターンを実践。Mooで書くPerlデザインパターン入門。
ウイスキー香味プロファイル生成器を作りながら、Factory MethodとStrategyの2パターンを手で覚える実践記事
Perlでテキストアドベンチャーゲームを作りながら、Chain of Responsibility、State、Mementoの3つのデザインパターンを実践的に学ぶチュートリアル。コマンド処理、ゲームモード管理、セーブ/ロード機能を段階的に実装します。