デザインパターンの一覧

デザインパターン一覧



デザインパターンとは、ソフトウェア開発において頻繁に発生する問題に対して、効果的な解決策として再利用可能な設計のテンプレートのことです。ここでは、さまざまなカテゴリに分類されたデザインパターンを詳しく解説します。

生成に関するパターン



オブジェクトの生成メカニズムを抽象化し、柔軟性と再利用性を高めることを目的とします。

Abstract Factory パターン: 関連するオブジェクト群を生成するためのインターフェースを提供し、具体的なクラスを隠蔽します。
Builder パターン: 複雑なオブジェクトの生成プロセスを段階的に行い、柔軟なオブジェクト構築を可能にします。
Factory Method パターン: オブジェクトの生成をサブクラスに委譲し、生成ロジックを柔軟に変更できるようにします。
Prototype パターン: 既存のオブジェクトをコピーして新しいオブジェクトを生成し、初期化コストを削減します。
Singleton パターン: クラスのインスタンスが一つしか存在しないことを保証し、グローバルなアクセスポイントを提供します。

構造に関するパターン



クラスやオブジェクトの構成方法を定義し、複雑なシステムを構築しやすくします。

Adapter パターン: 互換性のないインターフェースを持つクラス間で、インターフェースを変換して利用できるようにします。
Bridge パターン: 抽象化と実装を分離し、両者を独立して変更できるようにします。
Composite パターン: オブジェクトをツリー構造で表現し、単一のオブジェクトと複合オブジェクトを同一視して扱えるようにします。
Decorator パターン: オブジェクトに動的に機能を追加し、継承の代わりに柔軟な拡張を実現します。
Facade パターン: 複雑なサブシステムのインターフェースを単純化し、クライアントからの利用を容易にします。
Flyweight パターン: 多数のインスタンスを共有することでメモリ使用量を削減します。
Proxy パターン: オブジェクトへのアクセスを制御し、付加的な処理を可能にします。

振る舞いに関するパターン



オブジェクト間の相互作用を定義し、柔軟なアルゴリズムの実装をサポートします。

Chain of Responsibility パターン: リクエストを処理できるオブジェクトが連鎖し、柔軟な処理ルーティングを実現します。
Command パターン: リクエストをオブジェクトとしてカプセル化し、履歴やトランザクションなどの機能を実現します。
Interpreter パターン: 特定の言語を解釈するための文法を定義し、複雑な構文解析を可能にします。
Iterator パターン: コレクションの要素へのアクセス方法を抽象化し、柔軟な走査を可能にします。
Mediator パターン: オブジェクト間の複雑な相互作用をカプセル化し、結合度を低くします。
Memento パターン: オブジェクトの状態を保存および復元し、アンドゥ/リドゥ機能を実現します。
Observer パターン: オブジェクトの状態変化を通知し、複数のオブジェクトを同期させます。
State パターン: オブジェクトの内部状態に応じて振る舞いを変更し、状態遷移をカプセル化します。
Strategy パターン: アルゴリズムをカプセル化し、実行時に動的に選択できるようにします。
Template Method パターン: アルゴリズムの骨組みを定義し、サブクラスで具体的な実装を委ねます。
Visitor パターン: オブジェクト構造に対して、新しい操作を動的に追加します。

並行性に関するパターン



マルチスレッド環境での並行処理を効率的に行うための設計を提供します。

Active object パターン: オブジェクトが自身のスレッドで実行されることを保証し、非同期処理を容易にします。
Asynchronous method invocation: メソッド呼び出しを非同期的に実行し、呼び出し元をブロックしないようにします。
Balking パターン: オブジェクトが特定の状態でない場合、処理を拒否します。
Double-checked locking: スレッドセーフなSingletonを実装するためのパターンです。
Guarded suspension: 特定の条件が満たされるまでスレッドを一時停止します。
Immutable: オブジェクトの状態を変更不可能にすることで、並行処理での安全性を確保します。
Join パターン: スレッドの終了を待機し、処理の同期を取ります。
Proactor パターン: 非同期I/O処理を行うためのパターンです。
Producer-Consumer: 生産者と消費者が共有バッファを介してデータをやり取りします。
Reactor パターン: イベント駆動型の非同期処理を実現します。
Readers–writer lock(Read-Write Lock): 読み込みと書き込みアクセスを制御するためのロックです。
Scheduler パターン: スレッドの実行順序を制御します。
Single Threaded Execution: 一度に一つのスレッドだけが特定のコードを実行するように制御します。
Thread-Per-Message: リクエストごとに新しいスレッドを作成します。
Thread pool パターン: スレッドの再利用を効率化し、リソース消費を削減します。
Thread-Specific Storage: 各スレッドに固有のデータを格納します。
Two-Phase Termination: スレッドを安全に終了するためのパターンです。
Worker Thread: バックグラウンドでタスクを実行するスレッドです。
スレッド局所記憶: 各スレッドに固有のデータを格納します。
ロック: 共有リソースへのアクセスを制御するためのメカニズムです。
モニタ: ロックと条件変数を組み合わせた同期メカニズムです。

アーキテクチャに関するパターン



ソフトウェアシステムの構造を設計するための高レベルなパターンを提供します。

Active Record: データとビジネスロジックを関連付けるパターンです。
Data Access Object: データアクセス処理を抽象化します。
Data Transfer Object: データ転送用のオブジェクトです。
Front Controller パターン: 全てのクライアントリクエストを処理する単一のエントリーポイントを提供します。
Identity map パターン: オブジェクトの一意性を管理し、不要なオブジェクト生成を防ぎます。
Interceptor パターン: メソッドの呼び出しをインターセプトし、付加的な処理を行います。
MVC: モデル、ビュー、コントローラーの役割を分離します。
MVVM: モデル、ビュー、ビューモデルの役割を分離します。
Naked objects: ドメインオブジェクトをそのままUIに表示するパターンです。
パイプ&フィルタ: 処理を複数のフィルタに分割し、パイプラインのように連結します。
リフレクション: 実行時にクラスやオブジェクトの情報を取得・操作します。
Service locator パターン: サービスを検索・取得するためのパターンです。
Specification パターン: オブジェクトをフィルタリングするためのルールを定義します。
出版-購読型モデル: イベントを発行(出版)し、購読者がイベントを受信します。
多層アーキテクチャ: システムを複数のレイヤーに分割し、関心を分離します。

プレゼンテーション層のパターン



ユーザーインターフェースの構築と管理を支援するパターン。

Application Controller: プレゼンテーション層全体の制御を集中させます。
Composite View: 複数のビューを組み合わせて一つのビューを構成します。
Context Object: ビューに必要なコンテキスト情報を管理します。
Dispatcher View: 複数のビューを切り替えます。
Front Controller: 全てのリクエストを単一のコントローラーで処理します。
Intercepting Filter: リクエストとレスポンスを処理するフィルタを定義します。
Service To Worker: バックグラウンドで処理を行うワーカーを利用します。
View Helper: ビューの表示処理を支援します。

ビジネス層のパターン



アプリケーションのビジネスロジックを実装するためのパターン。

Application Service: ビジネスロジックをサービスとして提供します。
Business Delegate: ビジネスロジックへのアクセスを抽象化します。
Business Object: ビジネスドメインのオブジェクトを表現します。
Composite Entity: 複数のエンティティをまとめた複合エンティティを表現します。
Service Locator: ビジネスサービスを検索・取得します。
Session Facade: セッション管理とビジネスロジックへのアクセスをカプセル化します。
Transfer Object Assembler: 複数のデータ転送オブジェクトを組み立てます。
Transfer Object: データ転送用のオブジェクトです。
Value List Handler: 大量のデータを効率的に取得します。

インテグレーション層のパターン



異なるシステム間での連携を容易にするパターン。

Data Access Object: データアクセスを抽象化します。
Domain Store: ドメインオブジェクトを永続化します。
Service Activator: サービスを動的にアクティベートします。
Web Service Broker: Webサービスへのアクセスを仲介します。

ドメイン駆動設計のパターン



ドメインモデルを中心にソフトウェアを設計する手法に関するパターン。

ユビキタス言語: ドメイン専門家と開発者が共通で使用する用語。
モデル駆動設計: ドメインモデルを元に設計・開発を進めます。
実践的モデラ: 実践的なモデル作成の手法。
レイヤ化アーキテクチャ: ドメイン層、アプリケーション層、プレゼンテーション層を分離します。
エンティティ(参照オブジェクト): 一意な識別子を持つオブジェクト。
値オブジェクト: 値のみで識別されるオブジェクト。
サービス: ドメインロジックを実装する操作。
モジュール(パッケージ): 関連するコードをまとめる単位。
集約: 関連するエンティティと値オブジェクトの集合。
ファクトリ: 集約を生成する責任を持つオブジェクト。
リポジトリ: ドメインオブジェクトの永続化を抽象化します。

テスト駆動開発のパターン



テストを先に記述する開発手法におけるパターン。

テスティングのパターン



Mock Object パターン(擬装オブジェクトパターン): テスト時に依存オブジェクトの振る舞いをシミュレートするオブジェクト。
Self Shunt パターン(自己接続パターン): オブジェクト自身でテストを行う。
Log String パターン(記録用文字列): テスト中に発生したイベントを記録する文字列。
Crash Test Dummy パターン(衝突実験ダミー人形パターン): エラーを発生させるオブジェクト。
Null Object パターン(スペシャルケースパターン): 特別な処理を行わないオブジェクト。
Pluggble Object パターン: 処理をプラグイン可能なオブジェクト。
Pluggble Selector パターン: 実行するオブジェクトを動的に選択するオブジェクト。
Imposter パターン: オブジェクトを模倣するオブジェクト。
Collecting Parameter パターン: メソッド呼び出しを記録するオブジェクト。

その他のパターン



依存性の注入 (DI): 依存性を外部から注入する設計手法。
遅延読み込み: オブジェクトの初期化を必要な時まで遅らせる。
Abstract Server パターン: サーバーの抽象化。
データマッパーパターン: ドメインオブジェクトとデータベースの間のマッピング。
Domain inventory パターン: ドメインの概念を整理するためのパターン。
Factory パターン: オブジェクトの生成ロジックをカプセル化します。
Multiton パターン: 特定のキーに対してオブジェクトのインスタンスを一つだけ提供します。
Monostate パターン: 複数のインスタンスで状態を共有するパターン。
Object pool パターン: オブジェクトの再利用を促進します。
Servant (デザインパターン): オブジェクトの振る舞いを委譲します。
Service layer パターン: ビジネスロジックをサービスとして提供します。
Stairway to Heaven パターン: 複雑な状態遷移を簡略化するパターン。
Type Object Pattern: 型をオブジェクトとして表現します。
Type Tunnel パターン: 型の異なるオブジェクトを変換します。

これらのデザインパターンは、ソフトウェア開発においてより柔軟で、保守しやすく、再利用可能なコードを書くために非常に役立ちます。適切にこれらのパターンを理解し、適用することで、開発プロセスを効率化し、システムの品質を向上させることができます。

もう一度検索

【記事の利用について】

タイトルと記事文章は、記事のあるページにリンクを張っていただければ、無料で利用できます。
※画像は、利用できませんのでご注意ください。

【リンクついて】

リンクフリーです。