プロキシ パターンを調べていたのですが、デコレータ パターン、アダプタ パターン、ブリッジ パターンと非常によく似ているように思えます。何か誤解しているのでしょうか? 違いは何でしょうか? 他のパターンではなくプロキシ パターンを使用する理由は何でしょうか? 実際のプロジェクトでこれまでどのように使用してきましたか?
ベストアンサー1
Proxy、Decorator、Adapter、Bridge はすべて、クラスを「ラップ」するバリエーションです。ただし、それらの用途は異なります。
プロキシは、オブジェクトを遅延インスタンス化する場合、リモート サービスを呼び出しているという事実を非表示にする場合、またはオブジェクトへのアクセスを制御する場合に使用できます。
デコレータは「スマート プロキシ」とも呼ばれます。これは、オブジェクトのタイプを拡張するのではなく、オブジェクトに機能を追加したい場合に使用します。これにより、実行時に機能を追加できます。
アダプターは、抽象インターフェースがあり、そのインターフェースを、同様の機能的役割を持ちながら異なるインターフェースを持つ別のオブジェクトにマップする場合に使用されます。
Bridge はAdapter と非常によく似ていますが、抽象インターフェースと基礎となる実装の両方を定義する場合は Bridge と呼びます。つまり、レガシー コードやサードパーティ コードに適応するのではなく、すべてのコードの設計者でありながら、異なる実装を交換できる必要があります。
ファサードは、1 つ以上のクラスのサブシステムへの高レベル (つまり、より単純な) インターフェイスです。複数のオブジェクトで表現する必要がある複雑な概念があるとします。そのオブジェクトのセットに変更を加えると、どのオブジェクトに呼び出す必要があるメソッドがあるかが常にわかるとは限らないため、混乱が生じます。そのような場合は、オブジェクトのコレクションに対して実行できるすべての複雑な操作に対して高レベルのメソッドを提供するファサードを記述します。例: 、、などのメソッドを含む、学校セクションのドメイン
countStudents()
モデルreportAttendance()
。assignSubstituteTeacher()