PHP デザイン パターンのアダプター モード、つまりアダプター (エイリアス ラッパー) モード: あるクラスのインターフェイスを、顧客が期待する別のクラスのインターフェイスに変換します。アダプターを使用すると、元々互換性のないインターフェイスを持つクラスがシームレスに連携できるようになります。
PHP デザイン パターンのアダプター モード、つまりアダプター (エイリアス ラッパー) モード: あるクラスのインターフェイスを、顧客が期待する別のクラスのインターフェイスに変換します。アダプターを使用すると、元々互換性のないインターフェイスを持つクラスがシームレスに連携できるようになります。 このデザインパターンのキーポイント: 1) アダプター パターンは主に「既存のクラスを再利用したいが、インターフェースが再利用環境の要件と一致しない」場合に使用され、レガシー コードの再利用やクラス ライブラリの移行などに非常に役立ちます。 2) アダプタパターンにはオブジェクトアダプタとクラスアダプタの 2 つの実装構造がありますが、クラスアダプタは「多重継承」実装方式を採用しており、望ましくない高結合をもたらすため、一般的には推奨されません。 オブジェクト アダプタは、より疎結合の精神に沿った「オブジェクト結合」方式を採用しています。 次の 2 つの写真を通してその構造を見てみましょう: アダプタパターンのクラス構成図(継承) オブジェクトのアダプターパターン構造図(構成) (オブジェクトアダプターのコード実装) ターゲット: 特定のフィールドに関連してクライアントが使用するインターフェースを定義します。 パブリック インターフェイス ターゲット { void request();} 適応者: 今すぐ適応する必要がある既存のインターフェース public class Adapte{ public void specificRequest(){}} Adapter: Adapte インターフェースと Target インターフェースを適応させます public class アダプターは Target{ public Adaptor(Adapteeadaptee) { super() } public void request() {adaptee.specificRequest() } 適用範囲: 1) システムは既存のクラスを使用する必要があり、このタイプのインターフェイスはシステムのニーズを満たしていません。 2) 将来導入される可能性のあるクラスなど、相互に密接に関連していないいくつかのクラスを操作するために使用できる再利用可能なクラスを作成したいと考えています。これらのソース クラスには、必ずしも複雑なインターフェイスがあるわけではありません。 3) (オブジェクトアダプタの場合) 設計上、既存の複数のサブクラスのインターフェースを変更する必要があり、クラスアダプタモードを使用する場合、サブクラスごとにアダプタを作成する必要があり現実的ではありません。 このデザインパターンの長所と短所を見てみましょう: クラスアダプター: 1) 特定のアダプタ クラスを使用して、Adapte と Target を一致させます。その結果、クラスとそのすべてのサブクラスを一致させたい場合、クラスのアダプターはその仕事を実行できません。 2) アダプタは Adaptee のサブクラスであるため、アダプタが Adaptee の一部の動作をオーバーライド (再定義) できるようにします。 オブジェクトアダプター: 1) アダプタが複数のアダプティ、つまりアダプティ自体とそのすべてのサブクラス (サブクラスがある場合) を同時に動作できるようにします。アダプターは、すべての Adapte に一度に機能を追加することもできます。 2)、Adaptee の動作をオーバーライド (再定義) することが困難になります。 Adaptee メソッドをオーバーライドする必要がある場合は、まず Adaptee メソッドをオーバーライドするための Adaptee のサブクラスを作成し、次にこのサブクラスを適応用の実際の Adaptee ソースとして使用する必要があります。 |