Featured image of post 困ったコードを直しながら、GoFデザインパターン23種を全部たどる【目次】

困ったコードを直しながら、GoFデザインパターン23種を全部たどる【目次】

GoF のデザインパターン23種を、困ったコードを直す話として1話ずつ解説する全23話の目次です。実装は Perl です。

GoF(Gang of Four)のデザインパターン23種を、困ったコードを直す話として1話ずつ書いた全23話の連載です。各話では、持ち込まれたコードの困りごとを見立て、パターンを使って直すまでを物語仕立てでたどります。

どの話からでも読めます。実装は Perl ですが、コードを書ける必要はありません。直す前と後のコードを見比べて、何が変わったかを追えれば十分です。

このページは目次を兼ねた案内板です。初めてなら「まず読むなら」の3本から、手元に困っているコードがあるなら「困りごとから探す」から、パターン名で引きたいなら「GoF の分類で探す」から選んでください。

まず読むなら

  • Factory Method — 種類が増えるたびに伸びる if-elsif を片付ける回。多くの現場で最初に出会う困りごとで、ほかのパターンを読む足場になる
  • Builder — テストデータのコピペが原因で、テストは通るのに本番が落ちる回。設計の話を抜きにしても、明日のテストコードにそのまま使える
  • State — 真偽値フラグを重ねて、ありえない状態に入り込む回。フラグが3本を超えたコードを抱えているなら、いちばん効く

困りごとから探す

条件分岐が伸び続けて、足すたびにどこかが壊れる

  • Factory Method — 連携先ごとに分かれた if-elsif
  • Bridge — 部署×出力形式で掛け算に増える分岐
  • Chain of Responsibility — アラート判定の長い if-elsif
  • Visitor — 複数の関数に散らばった ref() の型判定
  • State — フラグの組み合わせで分岐する状態管理

同じコードを何か所も直している

  • Builder — テストごとにコピペしたテストデータ
  • Prototype — 種類ごとに全項目を書いたテンプレート
  • Template Method — 流れが同じ処理を丸ごとコピーしたモジュール

1つ足すと、関係ないはずの所が壊れる

  • Abstract Factory — 出力形式を足したら既存の形式が崩れた
  • Strategy — アルゴリズムを足したら別の結果が狂った
  • Mediator — モジュール同士が直接呼び合っている
  • Decorator — 機能を足すたびに本体を書き換えている
  • Composite — 階層を1段深くしたら集計が壊れた

重い、メモリが尽きる、相手に負荷をかける

  • Singleton — 重い初期化があちこちで何度も走る
  • Flyweight — 同じデータを件数分コピーしている
  • Proxy — 同じデータを何度も取り直している
  • Iterator — 全件を一度にメモリへ載せている
  • Observer — 変化を知るために問い合わせを繰り返している

古いコードや外の仕組みに合わせたい

  • Adapter — 触れない古いコードを新しい形式で呼びたい
  • Facade — 複数の部品を決まった順で呼ばないと動かない

変更を元に戻せない、危ない動かし方をしている

  • Command — 途中で失敗したデプロイを手で戻している
  • Memento — 上書きした設定を前の状態に戻せない
  • Interpreter — 文字列のルールを eval で実行している

GoF の分類で探す

生成に関するパターン (Creational Patterns)

構造に関するパターン (Structural Patterns)

振る舞いに関するパターン (Behavioral Patterns)

comments powered by Disqus
システム開発・AIワークフローのご相談は Meetsource へ
Hugo で構築されています。
テーマ Stack は Jimmy によって設計されています。