プロキシ、デコレータ、アダプタ、ブリッジパターン

1.はじめに

この記事では、Javaの構造設計パターンに焦点を当て、それらが何であるか、およびそれらのいくつかの間のいくつかの基本的な違いについて説明します。

2.構造設計パターン

Gang Of Four(GoF)によると、設計パターンは次の3つのタイプに分類できます。

  1. 創造的
  2. 構造
  3. 行動

簡単に言えば、構造パターンはクラスとオブジェクトの構成を扱います。これらは、オブジェクトの構成と継承を使用して抽象化を作成するさまざまな方法を提供します。

3.プロキシパターン

このパターンを使用して、ファイル、接続などの別のリソースへのインターフェイスとして機能する仲介者を作成します。このセカンダリアクセスは、実際のコンポーネントの代理を提供し、根本的な複雑さからコンポーネントを保護します。

パターンの詳細な例については、専用の投稿「Javaのプロキシパターン」を参照してください。

差別化のポイント:

  • プロキシは、参照を保持しているオブジェクトと同じインターフェイスを提供し、データを変更することはありません。これは、既存のインスタンスの機能をそれぞれ変更および装飾するアダプタおよびデコレータパターンとは対照的です。
  • プロキシは通常、コンパイル時に実際のサブジェクトに関する情報を持っていますが、デコレータとアダプタは実行時に挿入され、実際のオブジェクトのインターフェイスのみを認識します。

4.デコレータパターン

このパターンは、オブジェクトの動作を強化するのに役立ちます。詳細な概要については、ここで焦点を当てたチュートリアルをご覧ください:Javaのデコレータパターン

差別化のポイント:

  • プロキシパターンとデコレータパターンの構造は似ていますが、意図が異なります。プロキシの主な目的は使いやすさやアクセスの制御を容易にすることですが、デコレータは追加の責任を負います
  • プロキシパターンとアダプタパターンの両方が、元のオブジェクトへの参照を保持します
  • このパターンのすべてのデコレータは、他のモデルでは不可能な、再帰的に無限に使用できます。

5.アダプタパターン

アダプタパターンは、他の方法では直接接続できない2つの互換性のないインターフェイスを接続するために使用されます。アダプタは、既存のクラスを新しいインターフェイスでラップして、必要なインターフェイスとの互換性を確保します。

詳細な説明と実装については、専用の投稿「Javaのアダプタパターン」を参照してください。

アダプタパターンとプロキシパターンの主な違いは次のとおりです。

  • プロキシは同じインターフェイスを提供しますが、アダプタはクライアントと互換性のある異なるインターフェイスを提供します
  • アダプターパターンは、アプリケーションコンポーネントが設計された後に使用されるため、ソースコードを変更せずに使用できます。これは、コンポーネントの設計前に使用されるブリッジパターンとは対照的です。

6.ブリッジパターン

ブリッジパターンは、抽象化をその実装から切り離すために使用され、2つが独立して変化できるようにします。

これは、OOPの原則を使用して、責任をさまざまな抽象クラスに分離するブリッジインターフェイスを作成することを意味します。

詳細な説明と実装については、専用の投稿「Javaのブリッジパターン」を参照してください。

差別化のポイント

  • ブリッジパターンは、アプリケーションが設計される前にのみ実装できます。
  • 抽象化と実装を個別に変更できますが、アダプタパターンを使用すると、互換性のないクラスを連携させることができます。

7.結論

この記事では、構造設計パターンといくつかのタイプの違いに焦点を当てました。

いつものように、このチュートリアルの完全な実装はGithubにあります。