デザインパターン

デザインパターン

執筆済 ソフトウェア開発設計

繰り返し現れる設計問題への、名前の付いた解法。 GoF(Gang of Four)の 23 パターンが古典。

分類#

分類 目的
生成 オブジェクトの作り方 Factory、Builder、Singleton
構造 組み合わせ方 Adapter、Decorator、Facade、Proxy
振る舞い やり取りの仕方 Observer、Strategy、Command、State

よく使うもの#

パターン 用途
Strategy アルゴリズムを差し替える
Observer 変更を通知する
Adapter 合わないインタフェースを繋ぐ
Factory 生成の詳細を隠す
Decorator 機能を積み重ねる
Facade 複雑な内部を単純な窓口で隠す

最大の価値は語彙#

「Observer で」と言えば伝わることが、 パターンの実務的な価値の大部分。 設計の議論が速くなる。

言語機能に吸収されたもの#

GoF は 1994 年の本で、当時の C++ / Smalltalk が前提。 現代の言語では言語機能で済むものがある。

パターン 現代の対応
Strategy 関数を渡す
Command クロージャ
Iterator for-in、Sequence
Observer Combine、@Observable、シグナル
Singleton アンチパターン扱いされることが多い

Singleton の問題#

グローバルな可変状態
  → どこから変更されるか分からない
  → テストで初期化・差し替えができない
  → 依存が隠れる

依存性注入で 必要な相手に渡す方が良い。

使い方#

パターンを当てはめるために設計しない。 問題に直面してから、対応するパターンがあるか探す。

「Factory を使いたい」から始まる設計は、 たいてい必要のない抽象を生む。

参考文献#

  • Erich Gamma, Richard Helm, Ralph Johnson, John Vlissides. Design Patterns: Elements of Reusable Object-Oriented Software. Addison-Wesley, 1994.
  • Christopher Alexander et al. A Pattern Language. Oxford University Press, 1977.(GoF の着想源)
  • Martin Fowler. Patterns of Enterprise Application Architecture. Addison-Wesley, 2002.
ノート一覧を閉じる