プロキシ、デコレータ、アダプタ、ブリッジパターン
1. 前書き
この記事では、Javaの構造設計パターンに注目し、これらが何であるかと、それらのいくつかの根本的な違いについて説明します。
2. 構造設計パターン
Gang Of Four(GoF)によると、デザインパターンは3つのタイプに分類できます。
-
創作
-
構造的
-
行動的
簡単に言えば、構造パターンはクラスとオブジェクトの構成を処理します。 オブジェクトの構成と継承を使用して抽象化を作成するさまざまな方法を提供します。
3. プロキシパターン
このパターンでは、we create an intermediary that acts as an interface to another resource(ファイル、接続など)。 この二次アクセスは、実際のコンポーネントの代理を提供し、根本的な複雑さからそれを保護します。
パターンの詳細な例については、専用の投稿The Proxy Pattern in Javaを参照してください。
差別化のポイント:
-
プロキシは、参照を保持しているオブジェクトと同じインターフェースを提供し、データを変更することはありません。これは、既存のインスタンスの機能をそれぞれ変更および装飾するアダプタおよびデコレータパターンとは対照的です。
-
プロキシは通常、コンパイル時に実際のサブジェクトに関する情報を持っていますが、デコレータとアダプタは実行時に挿入され、実際のオブジェクトのインターフェイスのみを認識します。
4. デコレータパターン
This pattern is useful for enhancing the behavior of an object.詳細な概要については、ここで焦点を絞ったチュートリアルを参照してください:Decorator Pattern in Java
差別化のポイント:
-
プロキシパターンとデコレータパターンの構造は似ていますが、意図が異なります。 Proxyの主な目的は使いやすさやアクセスの制御を容易にすることですが、Decoratorは追加の責任を負います
-
プロキシとアダプターの両方のパターンは、元のオブジェクトへの参照を保持します
-
このパターンのすべてのデコレーターは、他のモデルでは不可能な無限の回数、再帰的に使用できます
5. アダプターパターン
The Adapter pattern is used for connecting two incompatible interfaces that otherwise cannot be connected directly.アダプタは、既存のクラスを新しいインターフェイスでラップして、必要なインターフェイスとの互換性を確保します。
詳細な説明と実装については、専用の投稿をご覧ください:Adapter Pattern in Java
アダプタパターンとプロキシパターンの主な違いは次のとおりです。
-
プロキシは同じインターフェースを提供しますが、アダプターはクライアントと互換性のある異なるインターフェースを提供します
-
アダプタパターンは、アプリケーションコンポーネントが設計された後に使用されるため、ソースコードを変更せずに使用できます。 これは、コンポーネントが設計される前に使用されるブリッジパターンとは対照的です。
6. ブリッジパターン
The Bridge pattern is used to decouple an abstraction from its implementation。これにより、2つは独立して変化します。
これは、OOP原則を使用して責任を異なる抽象クラスに分離するブリッジインターフェイスを作成することを意味します。
詳細な説明と実装については、専用の投稿をご覧ください:Bridge Pattern in Java
Key Points of Differentiation:
-
ブリッジパターンは、アプリケーションを設計する前にのみ実装できます。
-
アダプタパターンを使用すると、互換性のないクラスが連携して動作できるようになりますが、抽象化と実装は独立して変更できます
7. 結論
この記事では、構造設計パターンといくつかのタイプの違いに注目しました。
いつものように、このチュートリアルの完全な実装はover on Githubにあります。