Javaアダプターモード
最近、私はJavaの基本を学んでおり、アダプターを学んでいたときに多くの疑問を抱いています。オンラインで情報を検索して、アダプターに関する多くの情報を見つけましたが、この記事は良いです。これがレコードです。必要なものを読むことができます。
アダプターパターンは、1つのクラスのインターフェイスを別のインターフェイスに変換することです。これにより、元のインターフェイスが一致せず、一緒に動作できない2つのクラスが連携できます。機能的に言えば、これらのインターフェイスと互換性のないクラスには、一般に同じまたは類似の機能があります。通常、このクラスのインターフェイスを変更することにより、この種のインターフェイスの非互換性を解決しますが、アプリケーションの元のインターフェイスを変更したくない場合、またはオブジェクトのソースコードがまったくない場合、アダプターモードは役立ちます。
アダプターの利点:
1.ターゲットクラスとアダプタークラスを切り離します
2。クラスの透明性と再利用性を高め、クライアントクラスに透明性のあるアダプタークラスの特定の実装をカプセル化し、アダプターの再利用性を向上させます。
3.柔軟性と拡張の両方が非常に優れており、開閉の原則に準拠しています
アダプターに関係する役割には、次のものが含まれます。
ターゲット:クライアントが使用する特定のインターフェイスを定義します。
クライアント:ターゲットインターフェイスを使用して、ターゲットインターフェイスと一致するオブジェクトと協力します。
適応者:適応する必要がある既存のインターフェイス。
アダプター:Adapteeのインターフェイスをターゲットのインターフェイスに変換する責任があります。アダプターは具体的なクラスであり、このパターンの中核です。
アダプターは、クラスアダプターとオブジェクトアダプターの2つのタイプに分割されています。これについては、以下で詳しく説明します。
クラスアダプター
いわゆるクラスアダプターとは、アダプターの適応者を継承し、ターゲットインターフェイスターゲットを実装するアダプターアダプターを指します。 Javaの単一の継承であるため、このアダプターは継承されたアダプターアダプタのみを提供できます。コードは次のとおりです。
適応者
パッケージcom.bluemsun.classadapter; public class person {private int id;プライベート文字列名; / ***人は英語のみを話すことができます} /***セッターを省略します。 */}ターゲットインターフェイス(ターゲット)
パッケージcom.bluemsun.classadapter;/***ターゲットでは、人が英語、フランス語、日本語を話すことができます。しかし、今では人は英語のみを話すことができます * @author Administrator * */public interface target_person {void saysenglish(); void saysfrench(); void saysjapanese();}アダプタ
パッケージcom.bluemsun.classadapter;/***クラスアダプターは人を継承し、javaは単一でのみ継承できるため、このアダプターは人クラスのみに役立つため*このアダプターは、ソースコードを変更せずにターゲットインターフェイスで指定されたメソッドを実装できます* @author管理者* saysfrench(){system.out.println( "人はフランス語を言うことができます!"); } @Override public void says japanese(){system.out.println( "人が日本語を言うことができます!"); }}クライアント
パッケージcom.bluemsun.classadapter; public class test {public static void main(string [] args){target_person = new adapter_person(); person.sayenglish(); person.sayfrench(); person.sayjapanese(); }}上記のいくつかの単純なコードは、クラスアダプターの役割を示しています。最初に言ったように、このアダプターアダプターは人クラスのみにサービスを提供できます。この時点で、多くのクラスに適応する必要がある場合、適応する必要がある各クラスのアダプターを書く必要があるのだろうかと思うかもしれません。もっと柔軟な方法はありますか?答えは次のとおりです:はい!これは、以下で説明しているオブジェクトアダプターです。
オブジェクトアダプター
いわゆるオブジェクトアダプターは、簡単に言えば、アダプターがターゲットインターフェイスを実装するが、適応する必要があるクラスを継承しないことを意味します。代わりに、アダプターのコンストラクターを渡すことで適合します。コードは次のとおりです。(ターゲット、上記と同じ順応)
アダプタ
パッケージcom.bluemsun.objectdapter; import com.bluemsun.classadapter.person; Import com.bluemsun.classadapter.target_person;/** *オブジェクトアダプター、クラスアダプターとは異なり、オブジェクトアダプターはターゲット * @author管理者 */パブリックアダプタンのターゲットを実施するターゲットに複数のソースを適応させることができます。個人の人; //コンストラクターパブリックAdapter_Person(Person Person)で適応者クラスの人を渡す{this.person = person; } //ターゲットインターフェイスにsayenglish()を実装します - adaptee @override public void sayenglish(){this.person.sayenglish(); } // interface @override public void sayfrench(){system.out.println( "人がフランス語を言うことができる!"); } @Override public void says japanese(){system.out.println( "人が日本語を言うことができます!"); }}クライアント
パッケージcom.bluemsun.objectdapter; import com.bluemsun.classadapter.person; Import com.bluemsun.classadapter.target_person; public static void main(string [] args){ターゲット_person= new adapter_person(new person()); person.sayenglish(); person.sayfrench(); person.sayjapanese(); }}オブジェクトアダプターは、適応を伴う複数のクラスに適応できます。 Adapterのコンストラクターに適応して、さまざまなクラスを合格するだけです。柔軟性。
クラスアダプターの利点:
1.アダプタークラスはアダプタークラスのサブクラスであるため、一部のアダプターメソッドをアダプタークラスで置き換えることができ、アダプターをより柔軟にします。
クラスアダプターの短所:
1.複数の継承をサポートしていないJavaやC#などの言語の場合、最大で1つのアダプタークラスを一度に少なくとも1つのアダプタークラスに適合させることができ、ターゲットの抽象クラスはクラスではなくインターフェイスのみになります。その使用には特定の制限があります。アダプタークラスとそのサブクラスに同時にターゲットインターフェイスに適合することはできません。
オブジェクトアダプターの利点:
1.複数の異なるアダプターを同じターゲットに適応させます。つまり、同じアダプターがアダプタークラスとそのサブクラスの両方をターゲットインターフェイスに適応させることができます。
オブジェクトアダプターの短所:
1。クラスアダプターモードと比較して、アダプタークラスを交換するのは簡単ではありません。
読んでくれてありがとう、私はそれがあなたを助けることができることを願っています。このサイトへのご支援ありがとうございます!