デザインパターンは、ソフトウェア開発で繰り返し現れる問題に対する定番の解決策です。先人たちの知恵が詰まっており、設計の引き出しを増やすことで、より良いコードが書けるようになります。
デザインパターンとは
1994年にGoF(Gang of Four)が体系化した23のパターンが有名で、「生成」「構造」「振る舞い」の3カテゴリに分類されます。すべてを覚える必要はありませんが、よく使われるパターンは理解しておきたいところです。
基本パターン5選
1. Singleton(シングルトン)
クラスのインスタンスを1つだけに制限するパターンです。設定ファイルの管理やデータベース接続の共有に使われます。
class Config {
static instance = null;
static getInstance() {
if (!Config.instance) {
Config.instance = new Config();
}
return Config.instance;
}
}
2. Factory(ファクトリー)
オブジェクトの生成処理を別のクラスに委譲するパターンです。生成するオブジェクトの種類を実行時に切り替えられます。
TypeScript入門も参考にしてください。
3. Observer(オブザーバー)
あるオブジェクトの状態変化を、他のオブジェクトに自動的に通知するパターンです。イベント処理やリアクティブプログラミングの基盤になっています。
マイクロサービスとモノリスの違いも参考にしてください。
4. Strategy(ストラテジー)
アルゴリズムをクラスとして分離し、実行時に差し替え可能にするパターンです。ソート方法や料金計算ロジックの切り替えなどに使えます。
5. Decorator(デコレーター)
既存のオブジェクトに動的に機能を追加するパターンです。継承を使わずに機能を拡張でき、柔軟な設計が可能になります。
パターンを学ぶ意味
デザインパターンを知っていると、設計の選択肢が広がるだけでなく、チームメンバーとの共通言語になります。「ここはObserverパターンで実装しよう」と伝えれば、具体的な設計を共有できます。
ただし、無理にパターンを当てはめるのは逆効果です。シンプルな問題にはシンプルな解決策が最適です。
学習のコツ
- まずは実際のコードで「このパターンが使われている」と認識するところから始める
- ReactのuseStateはObserverパターン、DIコンテナはFactoryパターンの応用(React Hooks入門も参考になります)
- 自分のプロジェクトで小さなリファクタリングを試す
- チーム開発ではGitブランチ戦略と組み合わせて安全にリファクタリングを進める
関連記事:きれいなコードの書き方入門やコードレビューのマナーも合わせて読むと、設計力がより向上します。
まとめ
デザインパターンはエンジニアとしてのレベルアップに欠かせない知識です。エンジニア技術書おすすめで紹介されている書籍と合わせて学んでみてください。