この記事では、javaに関する関連知識を提供します。主にデザイン パターンに関連する問題を紹介し、主にアダプター パターンについて説明します。アダプター パターンは主にクラスのインターフェイスを変換するために使用されます。クライアントが望むターゲットクラス形式に変換することで、本来互換性のないクラスが連携して動作し、ターゲットクラスとアダプタークラスを分離できるようになります。
## 推奨学習: 「java ビデオ チュートリアル」
1. アダプター モードとは:アダプター モードは主に、クラスのインターフェイスをクライアントが望むターゲット クラス形式に変換するために使用され、本来互換性のないクラスが連携してターゲット クラスとアダプター クラスを分離できるようにします。また、「オープニングとクローズ」にも準拠します。原則" " を使用すると、元のコードを変更せずに新しいアダプター クラスを追加できます。アダプター クラス内の特定の実装のカプセル化はクライアント クラスに対して透過的であり、アダプターの再利用性が向上します、ただし、欠点もあります。それは、アダプターを交換する実装プロセスがより複雑であることです。
したがって、アダプター モードは、次のシナリオに適しています。1. クラス アダプター モード:
##ターゲット インターフェイス (Target ):顧客が期待するインターフェイス。ターゲットは、具体クラス、抽象クラス、またはインターフェイスにすることができます。実行結果:
- 適応する必要があるクラス (Adaptee): 適応する必要があるクラス、またはアダプター クラス。
- アダプター: 適応する必要があるオブジェクトをパッケージ化することにより、元のインターフェイスをターゲット インターフェイスに変換します。
// 已存在的、具有特殊功能、但不符合我们既有的标准接口的类 class Adaptee { public void specificRequest() { System.out.println("被适配类具有 特殊功能..."); } } // 目标接口,或称为标准接口 interface Target { public void request(); } // 具体目标类,只提供普通功能 class ConcreteTarget implements Target { public void request() { System.out.println("普通类 具有 普通功能..."); } } // 适配器类,继承了被适配类,同时实现标准接口 class Adapter extends Adaptee implements Target{ public void request() { super.specificRequest(); } } // 测试类public class Client { public static void main(String[] args) { // 使用普通功能类 Target concreteTarget = new ConcreteTarget(); concreteTarget.request(); // 使用特殊功能类,即适配类 Target adapter = new Adapter(); adapter.request(); } }ログイン後にコピー
普通类 具有 普通功能... 被适配类具有 特殊功能...
// 适配器类,直接关联被适配类,同时实现标准接口 class Adapter implements Target{ // 直接关联被适配类 private Adaptee adaptee; // 可以通过构造函数传入具体需要适配的被适配类对象 public Adapter (Adaptee adaptee) { this.adaptee = adaptee; } public void request() { // 这里是使用委托的方式完成特殊功能 this.adaptee.specificRequest(); } } // 测试类 public class Client { public static void main(String[] args) { // 使用普通功能类 Target concreteTarget = new ConcreteTarget(); concreteTarget.request(); // 使用特殊功能类,即适配类, // 需要先创建一个被适配类的对象作为参数 Target adapter = new Adapter(new Adaptee()); adapter.request(); } }
作成するインターフェイスに複数の抽象メソッドが存在する場合があります。インターフェイスの実装クラスを作成する場合、それらは次のようにする必要があります。このインターフェースのすべてのメソッドは、すべてのメソッドが必要なわけではなく、一部だけが必要な場合もあるため、明らかに無駄になることがあります。この問題を解決するために、インターフェースのアダプター・モードを導入します。抽象クラス 、この抽象クラスはインターフェイスとすべてのメソッドを実装します。元のインターフェイスは扱わず、抽象クラスとのみ連絡するため、クラスを作成し、抽象クラスを継承し、必要なメソッドを書き直します。 。クラス図を見てください:
これは簡単に理解できますが、実際の開発では、このインターフェイスで定義されているメソッドが多すぎることがよくあります。一部の実装クラスでは必須です。コードを見てください:
public interface Sourceable { public void method1(); public void method2(); }
抽象クラス Wrapper2:
public abstract class Wrapper2 implements Sourceable{ public void method1(){} public void method2(){} } public class SourceSub1 extends Wrapper2 { public void method1(){ System.out.println("the sourceable interface's first Sub1!"); } } public class SourceSub2 extends Wrapper2 { public void method1(){ System.out.println("the sourceable interface's second Sub2!"); } }
public class WrapperTest { public static void main(String[] args) { Sourceable source1 = new SourceSub1(); Sourceable source2 = new SourceSub2(); source1.method1(); source1.method2(); source2.method1(); source2.method2(); } }
実行結果:
the sourceable interface's first Sub1! the sourceable interface's second Sub2!
推奨学習: 「
Java ビデオ チュートリアル以上がJava デザイン パターン分析アダプター パターン (詳細な例)の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。