概要#
デザインパターン(Design Patterns)は、ソフトウェア設計において繰り返し使用されるコード設計の経験であり、コードの再利用性、拡張性、保守性を向上させることを目的としています。これらのパターンは、Erich Gamma、Richard Helm、Ralph Johnson、John Vlissides の 4 人によってまとめられ、彼らの著書『Design Patterns』で詳細に紹介されているため、GoF(4 人組)とも呼ばれています。
設計原則#
- オープン・クローズド原則:ソフトウェアは拡張に対してオープンであり、修正に対してクローズドであるべきです。
- リスコフの置換原則:サブクラスのオブジェクトは、親クラスのオブジェクトを使用するすべての場所で置き換え可能であり、プログラムの正しさに影響を与えないべきです。
デザインパターンの概要#
抽象ファクトリー (Abstract Factory)#
一連の関連または相互依存するオブジェクトを作成するためのインターフェースを提供し、それらの具体的なクラスを指定することなく使用します。
アダプター (Adapter)#
あるクラスのインターフェースを、クライアントが望む別のインターフェースに変換し、元々インターフェースが互換性がないために一緒に動作できなかったクラスが一緒に動作できるようにします。
ブリッジ (Bridge)#
抽象とその実装を分離し、両者が独立して変化できるようにします。
ビルダー (Builder)#
複雑なオブジェクトの構築とその表現を分離し、同じ構築プロセスで異なる表現を作成できるようにします。
責任チェーン (Chain of Responsibility)#
複数のオブジェクトにリクエストを処理する機会を与え、リクエストの送信者と受信者の間の結合関係を回避します。
コマンド (Command)#
リクエストをオブジェクトとしてカプセル化し、異なるリクエストでクライアントをパラメータ化できるようにします。
コンポジット (Composite)#
オブジェクトをツリー構造に組み合わせて「部分 - 全体」の階層構造を表現します。
デコレーター (Decorator)#
動的にオブジェクトに追加の責任を付与します。
ファサード (Facade)#
サブシステム内の一連のインターフェースに対して一貫したインターフェースを提供します。
ファクトリーメソッド (Factory Method)#
オブジェクトを作成するためのインターフェースを定義し、サブクラスがどのクラスをインスタンス化するかを決定します。
フライウェイト (Flyweight)#
共有技術を利用して、大量の細粒度のオブジェクトを効率的にサポートします。
インタープリター (Interpreter)#
特定の言語に対して、その文法の表現を定義し、その表現を使用して言語内の文を解釈するインタープリターを定義します。
イテレーター (Iterator)#
集約オブジェクト内の各要素に順番にアクセスする方法を提供します。
メディエーター (Mediator)#
中介オブジェクトを使用して、一連のオブジェクトの相互作用をカプセル化します。
メメント (Memento)#
カプセル化を破壊することなく、オブジェクトの内部状態をキャプチャし、その状態をオブジェクトの外部に保存します。
オブザーバー (Observer)#
オブジェクト間の一対多の依存関係を定義します。
プロトタイプ (Prototype)#
プロトタイプインスタンスを使用してオブジェクトの種類を指定し、これらのプロトタイプをコピーすることで新しいオブジェクトを作成します。
プロキシ (Proxy)#
他のオブジェクトへの代理を提供し、そのオブジェクトへのアクセスを制御します。
シングルトン (Singleton)#
クラスが唯一のインスタンスを持つことを保証し、それにアクセスするためのグローバルなアクセスポイントを提供します。
ステート (State)#
オブジェクトが内部状態を変更する際に、その振る舞いを変更できるようにします。
ストラテジー (Strategy)#
一連のアルゴリズムを定義し、それらを個別にカプセル化し、相互に置き換え可能にします。
テンプレートメソッド (Template Method)#
操作のアルゴリズムの骨組みを定義し、いくつかのステップをサブクラスに遅延させます。
ビジター (Visitor)#
特定のオブジェクト構造内の各要素に作用する操作を表現します。