この記事では、Java のアダプター モード (アダプター) とは何なのかを説明します。アダプターのパターン (詳細な説明)。困っている友人は参考にしていただければ幸いです。
目的: クライアント (クライアント) のニーズを満たすために、ソース タイプをターゲット タイプに適合させます。ここでは、ターゲット インターフェイスの呼び出し元をクライアントと見なします。
#使用シナリオ: 型をソース型からターゲット型に変換する必要があるシナリオ
前提条件 #:既存のクライアント//Client 一个调用目标接口的方法
Class ClientInvoking {
static void invoke(TargetInterface target) {
String value = target.getMark();
System.out.println(value);
}
}
#モード 1:ターゲット インターフェイスがあり、既存のメソッドが存在します。
//目标接口 public interface TargetInterface { public String getMark(); public String getInfo(); }
//已有类及方法 public class ExistClass { public String sayHello() { return "Hello"; } public String sayWorld() { return "World"; } }
ソリューション 1. クラス アダプターmode
//适配器 public class ClassAdapter extends ExistClass implements TargetInterface { public int getMark() { String value = this.sayHello(); return value; } public int getInfo() { String value = this.sayWorld(); return value; } }
//客户端调用 TargetInterface target = new ClassAdapter(); ClientInvoking.invoke(target);
Java インターフェースの概念から、TargetInterface の実装クラスとしての ClassAdapter は、クライアントのニーズに適応するために TargetInterface 型に上方変換できることがわかります。
オプション 2. オブジェクト アダプター パターン
//适配器 public class ClassAdapter implements TargetInterface { private ExistClass exist; public ClassAdapter(ExistClass existClass) { this.exist = existClass; } public int getMark() { String value = exist.sayHello(); return value; } public int getInfo() { String value = exist.sayWorld(); return value; } }
//客户端调用 TargetInterface target = new ClassAdapter(new ExistClass()); ClientInvoking.invoke(target);
モード 2: ターゲット インターフェイスはありませんが、ターゲット クラスは存在し、既存のメソッドは存在します。
まずは前提条件を確認しましょうクライアントは次のように変更されます。
Class ClientInvoking { static void invoke(TargetClass target) { String value = target.getMark(); System.out.println(value); } }
//目标类 public class Class { public String getMark() { return "yes"; } public String getInfo() { return "no"; } }
//已有类及方法 public class ExistClass { public String sayHello() { return "Hello"; } public String sayWorld() { return "World"; } }
ExistClass によって返された文字列がまさにクライアントが使用する必要があるものであると想定しており、クライアントが必要とする TargetClass オブジェクトのコンテンツは古いため、ある方法で ExistClass を適応させる必要があります。クライアントのニーズに合わせて;
//适配器 public class ClassAdapter extends TargetClass { private ExistClass exist; public ClassAdapter(ExistClass existClass) { this.exist = existClass; } public int getMark() { String value = exist.sayHello(); return value; } public int getInfo() { String value = exist.sayWorld(); return value; } }
//客户端调用 TargetClass target = new ClassAdapter(new ExistClass()); ClientInvoking.invoke(target);
このモードでは、2 つのクラスが設計され、最後に Java の単一継承メカニズムに従って、必要となるのは次のとおりです。フォーム、オブジェクト アダプター パターンを通じてオブジェクトを保持します。
モード 3: デフォルトのアダプター モード
このモードでは、明示的なターゲット タイプはなく、ソース タイプのみが必要です。これを使用するには、多くの場合、ソース タイプが必要のないものを提供しすぎており、アダプター モードを通じてカスタマイズする必要があるためです。 WindowListener を例として説明します。
//WindowListener源码 public interface WindowListener extends EventListener { public void windowOpened(WindowEvent e); public void windowClosing(WindowEvent e); public void windowClosed(WindowEvent e); ... }
//添加监听器的例子 Frame frame = new Frame(); frame.addWindowListener(new WindowListener() { @Override public void windowOpened(WindowEvent e) { } @Override public void windowClosing(WindowEvent e) { } @Override public void windowClosed(WindowEvent e) { } ... })
このようなコードは非常に面倒に思えます。たとえば、終了イベントをリッスンするだけで済みますが、大量のテンプレート コードが生成されます。コードの可読性が低下することを考慮して、コードをカスタマイズし、実装するインターフェイスを 1 つだけ用意します。インターフェイスを作成し、空の実装をすべてのリスナーに提供します。その後、抽象クラスのサブクラスを使用して、ウィンドウを閉じるリスナーの実装を書き換えます。コードは次のとおりです。 #この方法により、インターフェイスが簡素化され、コードの読みやすさが向上します。最も重要なことは、インターフェイスのカスタマイズを実現し、必要なことだけを実行できるようになったということです。
要約: 以上がこの記事の全内容です。皆さんの学習に役立つことを願っています。関連チュートリアルの詳細については、Java ビデオ チュートリアル
、Java 開発グラフィック チュートリアル、ブートストラップ ビデオ チュートリアル
をご覧ください。以上がJavaのアダプターパターン(Adapter)とは何ですか?アダプターパターン(詳細説明)の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。