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