java23デザインパターン(3) - アダプタモード

まず、アダプタモード

転載:https://www.cnblogs.com/V1haoge/p/6479118.html

アダプタは、両方の接続のために一致しない2つの間に存在するミドルウェアアダプテーションの一種であり、ミスマッチは通常、単純なポイント・アダプタは、変換器等の存在を見たことが理解される一致となります。

2つのモードでアダプタ:アダプタクラス、オブジェクトアダプタインターフェイスアダプタ

変化第3のインタフェースアダプタの役割として、わずかに異なるの実現に2つの前者。

1、クラスアダプタモード:

原理:アダプター機能を継承によって実現します。

我々は、ポートAは、我々が望んでいた方法ではありませんが、適切な方法で別のインターフェイスBで見つかった、我々はアクセスインタフェースAを変更しないアクセスしたい場合は、このケースでは、我々は、pにアダプタを定義することができますトランジットは、このアダプタは、その後、Bは、インタフェースBBを実装するクラスを継承し、我々は現在のインタフェースA(それは私たちの食べ物、現在ではありませんが)アクセス方法を持ち続けることができるように、私たちの訪問を達成するためのpのインタフェースと、我々はできるように、アダプタインターフェイスBにアクセスする方法であって、P、及び単純なアダプタクラスの完了ように、我々インタフェースアダプタPにおける方法は、BBへの直接参照の適切な方法です。

以下の例を参照してください:私たちはPS2とUSBアダプタの例を

PS2インターフェース:Ps2の

 パブリック インターフェースPs2の{
      ボイドisPs2(); 
 }

USBインターフェース:USB

パブリック インターフェースUsbの{
     ボイドisUsb(); 
 }

USBインターフェースカテゴリ:Usber

パブリック クラス Usberは実装Usbの{ 

    @Override 
    公共 無効isUsb(){ 
        System.out.printlnは( "USB口" ); 
    } 

}

アダプタ:アダプタ

パブリック クラスアダプタ延び Usberが実装Ps2の{ 

    @Override 
    公共 ボイドisPs2を(){ 
        isUsb()。
    } 

}

試験方法:Clienter

パブリック クラスClienter { 

    公共 静的 ボイドメイン(文字列[]引数){ 
        PS2版P = 新しいアダプタ()。
        p.isPs2(); 
    } 

}

結果の表示:

USBポート

説明する例:

  私の手は、PS2プラグデバイスを持っているが、唯一のホストUSBプラグソケット上で、どのようにそれを行うには?使用可能な状態であることをPS2プラグUSBプラグを変換するコンバータのホールドを取得します。

  インタフェースPs2の:説明インタフェースフォーマットPS2

  インターフェースUSB:USBインタフェースフォーマットの説明

  クラスUsber:USBは、それが特定のUSBインタフェースフォーマットインタフェースの実装クラスです

  アダプタ:USBインターフェース・フォーマットになるために変換するためのPS2インタフェースフォーマット

2、オブジェクトアダプタモード

原理:アダプタ機能の組み合わせによって達成されます。

我々は、ポートAは、我々が望んでいた方法ではありませんが、適切な方法で別のインターフェイスBで見つかった、我々はアクセスインタフェースAを変更しないアクセスしたい場合は、このケースでは、我々は、pにアダプタを定義することができます我々は(それが現在私たちの食べ物ではありませんが)現在のインターフェイスをアクセス方法を持ち続け、その後、C(オブジェクト)(BインタフェースアダプタPプライベート変数を定義することができるようにトランジット、このアダプタは、私たちの訪問を達成するためのpのインタフェースと、ポイント変数名)、その後、オブジェクトCに割り当てられたパラメータを用いてオブジェクトCのコンストラクタを定義し、メソッド実装のインタフェースからBのインタフェースを使用してメソッドを呼び出します。

以下の例を参照してください:我々はまだPS2とUSBアダプタの例を

PS2インターフェース:Ps2の

パブリック インターフェースPs2の{
      ボイドisPs2(); 
 }

USBインターフェース:USB

パブリック インターフェースUsbの{
      ボイドisUsb(); 
 }

USBインターフェースカテゴリ:Usber

パブリック クラス Usberは実装Usbの{ 

    @Override 
    公共 無効isUsb(){ 
        System.out.printlnは( "USB口" ); 
    } 

}

アダプタ:アダプタ

パブリック クラスアダプタが実装Ps2の{ 
    
    プライベートUSB USBとを、
    パブリックアダプタ(USBのUSB){
         この .usb = USB。
    } 
    @Override 
    公共 ボイドisPs2(){ 
        usb.isUsb()。
    } 

}

テストカテゴリ:Clienter

パブリック クラスClienter { 

    公共 静的 ボイドメイン(文字列[]引数){ 
        PS2版P = 新しいアダプタ(新しいUsber())。
        p.isPs2(); 
    } 

}

結果の表示:

USBポート

説明する例:

  私の手は、PS2プラグデバイスを持っているが、唯一のホストUSBプラグソケット上で、どのようにそれを行うには?使用可能な状態であることをPS2プラグUSBプラグを変換するコンバータのホールドを取得します。

  インタフェースPs2の:説明インタフェースフォーマットPS2

  インターフェースUSB:USBインタフェースフォーマットの説明

  クラスUsber:USBは、それが特定のUSBインタフェースフォーマットインタフェースの実装クラスです

  アダプタ:USBインターフェース・フォーマットになるために変換するためのPS2インタフェースフォーマット

3、インタフェースアダプタモード

原理:抽象クラスは、わずかに上記の他に適応するように構成されている適応、によって達成されます。

そこにN多くの方法を定義し、そのようなインタフェースであり、そして我々は今、我々が直接インタフェースを実装する場合、これらのメソッドのいくつかを使用したいので、我々は唯一にしている場合でも、すべての方法を達成したいときこの方法はまた、このタイプは、肥大化引き起こす可能性があります(達成するための具体的な方法、括弧のペアのみを書きません)ブランキングを必要としない、コールはその後、我々はミドルウェア、すなわちアダプタとして抽象クラスを使用することができ、便利ではありません、抽象クラスとインターフェイスを実装しますが、すべてのメソッドは、ブランキング抽象クラスでは、我々は抽象クラスを継承作成し、いくつかの方法は、あなたが私たちが使用する必要があることを書き換えることができます。

宛先インターフェイス:

パブリック インターフェースAは{
     無効()。
    B();
    C();
    D();
    無効E();
    F(); 
}

アダプタ:アダプタ

パブリック 抽象 クラスアダプタ実装{
     公共 ボイドA(){}
     公共 ボイドB(){}
     公共 ボイドC(){}
     公共 ボイドD(){}
     公共 ボイドE(){}
     公共 ボイドFを(){} 
}

実装クラス:Ashili

パブリック クラス Ashili 延びアダプタ{
     公共 ボイドA(){ 
        System.out.printlnは( "実現方法が呼び出される" ); 
    } 
    公共 ボイドD(){ 
        System.out.printlnは( "D実装メソッドが呼び出されます" ); 
    } 
}

テストカテゴリ:Clienter

パブリック クラスClienter { 

    公共 静的 ボイドメイン(文字列[]引数){ 
        A = 新たAshili()。
        AA(); 
        広告(); 
    } 

}

4、アダプタモードのシナリオ

使い方シーンオブジェクトアダプタと一致クラスアダプタ、両者の間のわずかな違いを達成するための手段は、主に以下のシナリオで使用されます。

  (1)既存のクラスを使用したいが、それは、既存のインタフェース仕様に準拠していない、それは不可能に直接アクセスすること、そして間接的にアダプタを作成し、このクラスのメソッドにアクセスすることができます。

  (2)当社は、(マルチアクセスでもよい)、クラスを持って、再利用可能なクラスを設計したいと思います、我々は適切なインターフェースを提供していない他のクラスには、このクラスを適応させるアダプタを作成することができます。

  実際には、二つの角度から以上2つのシーンは、問題のクラスを記述するために、それはあなたがアクセスする方法ですインターフェイス(アクセスする)、アクセス(アクセス・イニシアチブ)から出発から出発適切なインタフェースではありません。

インタフェースアダプタの使用シナリオ:

  私たちは、あなたがない方法で、インタフェースを実装する抽象クラスを使用することができます使用して、これらのメソッドのすべてを実装する際のインタフェースを実装する必要があり、(1)インターフェイスまたは特定のメソッドを使用したいのですが、インターフェースは、あまりにも多くの方法があります(空白のみ)を達成し、我々は利用したいの書き換えによって実現されるこの抽象クラスのメソッドを拡張します。この抽象クラスは、アダプタです。

おすすめ

転載: www.cnblogs.com/cq-yangzhou/p/10999570.html
おすすめ