「アダプターパターン」デザインパターン

アダプターパターンとは何ですか

アダプター パターンは、既存のクラスまたはインターフェイスを必要な別のインターフェイスに変換できるようにする構造的な設計パターンであり、元々互換性のないインターフェイスが連携できるようにします。アダプター モードは通常、新旧システム間のインターフェイスの非互換性を解決するために使用されますが、一部の複雑なロジックをカプセル化するために使用することもできます。

アダプター パターンを使用する理由

アダプター クラスは、クラスを使用したいが、そのインターフェイスが他のコードと互換性がない場合に使用されます。
このようなクラスを再利用する必要がある場合、それらは同じ継承システム内にあり、追加の共通メソッドがいくつかありますが、これらの共通メソッドは、この継承システム内のすべてのサブクラスに共通しているわけではありません。
場合によっては、既存のコードやクラス ライブラリを使用する必要があるが、それらがニーズを満たしていない場合は、アダプター パターンを使用してそれらを必要なインターフェイスに変換できます。アダプター モードを使用すると、既存のコードを変更せずに機能要件を迅速に実現できます。

仕事のどこで使いますか

アダプター パターンは、互換性のないクラスが適切に連携できるようにするために、既存のプログラムでよく使用されます。
アダプターは既存のオブジェクトのインターフェースを変更できます。
アダプターは、カプセル化されたオブジェクトにさまざまなインターフェイスを提供できます
Android 開発では、アダプター パターンは非常に一般的です。たとえば、ListView は一般的に使用されるリスト コントロールであり、データをロードして表示するにはアダプター (アダプター) が必要です。さまざまな形式のデータを処理するアダプターを定義し、それを ListView で必要な形式に変換できます。さらに、Android システムのバージョンが異なると、レイアウト ファイルの命名規則も異なります。アダプター モードを使用して、この互換性の問題に対処できます。

デザインのアイデア

アダプター パターンは主に 3 つの役割で構成されます。

  • ターゲット インターフェイス (Target): クライアントが必要とするインターフェイス。クライアントが必要とするリクエストを定義します。
  • ソースインターフェイス (Adapte): 既存のインターフェイスを定義する、調整する必要があるインターフェイスですが、クライアントが必要とするインターフェイスと互換性がありません。
  • アダプタ: ソース インターフェイスをターゲット インターフェイスに変換し、ターゲット インターフェイスを実装し、ソース インターフェイスのインスタンスを保持するクラス。

アダプター パターンの中心的な考え方は、アダプター内にソース インターフェイスのインスタンスを保持し、ソース インターフェイスのメソッドをターゲット インターフェイスのメソッドに変換することです。この変換は、継承または集約を通じて実現できます。

コード

次に、220V から 5V へのインターフェイスを定義する必要があります。

    interface Adapter {
    
    //适配器类
        int convert_5v();//装换成5V
    }

適応されたロールは通常、新しいインターフェイスに適応する必要がある既存のクラスです。220V 電源は生活のあらゆる場所にあります。

    public class Electric {
    
    // 电源
        public int output_220v() {
    
    //输出220V
            return 220;
        }
    }

220V を 5V 出力に変換できる特定のアダプター、つまり変圧器が必要です。
最初の方法はオブジェクト アダプター (より一般的に使用されるもの) です。

     public class PhoneAdapter1 implements Adapter {
    
    //手机适配器类
        private Electric mElectric;//适配器持有源目标对象

        public PhoneAdapter(Electric electric) {
    
    //通过构造方法传入对象
            mElectric = electric;
        }

        @Override
        public int convert_5v() {
    
    
            System.out.println("适配器一开始工作:");
            System.out.println("输入电压:" + mElectric.output_220v());
            System.out.println("输出电压:" + 5);
            return 5;
        }
    }

2 番目の方法のクラス アダプター (継承によって実装)

public class PhoneAdapter2 extends Electric implements Adapter {
    
    
	@Override
    public int convert_5v() {
    
    
    	int param = output_220v();
    	return suit(param);
    }
	
	/** 
     * 转换操作 
     * 当然你可以在转换中做很多事情(这里只是简单的说明)
     */ 
    private int suit(int param) {
    
     
  		int output = param / 44; 
  		System.out.println("适配器二开始工作:");
        System.out.println("输入电压:" + mElectric.output_220v());
        System.out.println("输出电压:" + output);
        return output; 
    } 
}

テストクラス

 public void test() {
    
    
    Electric electric = new Electric();
    System.out.println("默认电压:" + electric.output_220v());

    Adapter phoneAdapter1 = new PhoneAdapter1(electric);//传递一个对象给适配器
    System.out.println("适配转换后的电压1:" + phoneAdapter.convert_5v());
    Adapter phoneAdapter2 = new PhoneAdapter2();
    System.out.println("适配转换后的电压2:" + phoneAdapter2.convert_5v());

}

出力結果

默认电压:220
适配器一开始工作:
输入电压:220
输出电压:5
适配转换后的电压:5

适配器二开始工作:
输入电压:220
输出电压:5
适配转换后的电压:5

要約する

アダプター パターンは一般的に使用される設計パターンであり、既存のコードを変更せずに機能要件を迅速に実現するのに役立ちます。Android 開発では、アダプター パターンは、特にリストなどのコントロールを扱う場合に非常に一般的です。アダプター パターンの中心的な考え方は、アダプター内にソース インターフェイスのインスタンスを保持し、ソース インターフェイスのメソッドをターゲット インターフェイスのメソッドに変換することです。

おすすめ

転載: blog.csdn.net/weixin_45112340/article/details/129703586