1075 文字
5 分
【設計】デザインパターン【一覧】

目次

1
デザインパターンについて
2
1. 生成パターン(Creational Patterns)
3
2. 構造パターン(Structural Patterns)
4
3. 振る舞いパターン(Behavioral Patterns)
5
まとめ

デザインパターンについて#

デザインパターンとは、ソフトウェア設計における頻出する問題を解決するための汎用的な設計テンプレートのこと。 オブジェクト指向設計において、オブジェクトの生成・構造・振る舞いに関する課題を体系的に整理し、再利用可能な形でまとめたものです。

デザインパターンは、具体的なコードの実装を示すものではなく、設計の指針として機能します。これにより、コードの可読性や保守性が向上し、開発者間での共通認識を持ちやすくなります。

代表的であるGoF(Gang of Four)のデザインパターンは23種類あり、「生成」「構造」「振る舞い」 の3つのカテゴリに分類されます。


1. 生成パターン(Creational Patterns)#

オブジェクトの生成方法を管理し、効率的なインスタンス生成を実現する。

パターン名概要使いどころメリット
Factory Methodサブクラスがインスタンス生成を決定する具体的なクラスを意識せずにオブジェクトを作りたいカプセル化、拡張性向上
Abstract Factory関連するオブジェクト群を一括で生成UIフレームワークなど、関連オブジェクトをまとめて作る依存関係を減らせる
Singleton1つのクラスのインスタンスが常に1つだけ設定管理、ログ管理などインスタンス共有、メモリ節約
Builder複雑なオブジェクトを段階的に組み立てるオプションの多いオブジェクトの生成可読性向上、柔軟な生成
Prototype既存のオブジェクトをコピーして新しいインスタンスを作るオブジェクトの生成コストを抑えたい場合高速なインスタンス生成

2. 構造パターン(Structural Patterns)#

オブジェクトやクラスの関係を整理し、柔軟な構造を実現する。

パターン名概要使いどころメリット
Adapter既存のクラスを異なるインターフェースで使えるようにする互換性のないAPIを統一する既存コードを変更せずに再利用
Bridge抽象部分と実装部分を分離し、それぞれ独立して拡張可能にするUIテーマの切り替えなど柔軟な拡張
Composite木構造を使い、個別オブジェクトとグループを統一的に扱うファイルシステム、GUIコンポーネント再帰的な構造を簡単に実装
Decoratorオブジェクトの機能を動的に追加するI/Oストリーム、ログの拡張など柔軟な機能追加
Facade複雑なシステムにシンプルなインターフェースを提供する外部ライブラリの利用時シンプルなAPI設計
Flyweight共通データを共有し、メモリ使用量を削減する文字フォントやゲームのスプライト管理メモリ節約
Proxy代理オブジェクトを介してアクセス制御や遅延処理を行うリモートオブジェクト、キャッシュ管理アクセス制御、リソース管理

3. 振る舞いパターン(Behavioral Patterns)#

オブジェクトのやり取りや、責務の分担を整理する。

パターン名概要使いどころメリット
Chain of Responsibilityリクエストを処理できるオブジェクトに順番に渡すログ処理、認証、フィルター柔軟なリクエスト処理
Commandリクエストをオブジェクトとしてカプセル化するUndo/Redo機能、バッチ処理処理の分離、履歴管理
Interpreter独自言語の構文解析を実装するSQLパーサー、スクリプトエンジン柔軟な言語解析
Iterator集合オブジェクトをシーケンシャルに操作できるようにするコレクションのループ処理一貫したインターフェース提供
Mediatorオブジェクト間のやり取りを中央で管理するチャットアプリのメッセージ仲介依存関係の低減
Mementoオブジェクトの状態を保存・復元するUndo/Redo機能履歴管理が簡単になる
Observer1つのオブジェクトの状態変化を複数のオブジェクトに通知するイベントリスナー、通知機能疎結合、リアルタイム更新
State状態によって振る舞いを変えるゲームキャラクターの状態管理状態管理が明確になる
Strategy振る舞い(アルゴリズム)を外部から切り替え可能にするソートアルゴリズム、認証方式柔軟なアルゴリズム変更
Template Method基本的な処理の流れを決め、詳細はサブクラスで実装するフレームワーク、ワークフロー管理コードの再利用性向上
Visitorオブジェクトの構造を変更せずに新しい処理を追加するコンパイラの構文解析、ファイル構造の走査柔軟な処理の追加

まとめ#

  • 生成パターン → オブジェクトの作り方を整理(Singleton, Factory, Builder など)
  • 構造パターン → クラスやオブジェクトの関係を整理(Adapter, Decorator, Proxy など)
  • 振る舞いパターン → オブジェクトのやり取りや処理の流れを整理(Observer, Strategy, Command など)
【設計】デザインパターン【一覧】
https://oooo-o0.github.io/posts/designpattern/
作者
Sui
公開日
2025-04-11
ライセンス
CC BY-NC-SA 4.0