Java アダプター パターンを理解して使用するにはどうすればよいですか?

PHPz
リリース: 2023-04-23 09:19:14
転載
1408 人が閲覧しました

1. アダプター モードとは何ですか?

実際には、この 3 つの単語のアダプターについては誰もがよく知っているはずです。Apple の iPhone には充電プラグが提供されなくなったことはわかっています。箱にはデータ ケーブルが 1 本しか入っていないため、このデータ ケーブルを単独で使用することはできません。 220V のプラグイン ボードで充電するため、プラグイン ボードと携帯電話を接続するための新しいアダプターを購入する必要があります。

実際、ソフトウェア設計においては、開発が必要な特定のビジネス機能を備えたコンポーネントが既存のコンポーネント ライブラリにすでに存在しているにもかかわらず、現在のシステムのインターフェイス仕様と互換性がないという状況も発生することがあります。これらのコンポーネントは再開発されており、コンポーネントのコストは非常に高いため、アダプター モードはこれらの問題をうまく解決できます。

2. アダプター パターンの定義

アダプター パターン: クラスのインターフェイスを顧客が望む別のインターフェイスに変換し、互換性のないインターフェイスにより連携できないクラスが動作できるようにします。

アダプターパターンにはクラス構造パターンとオブジェクト構造パターンの2種類があり、前者は後者に比べてクラス間の結合度が高く、プログラマは関連するコンポーネントの内部構造を理解する必要があります。既存のコンポーネント ライブラリがあるため、アプリケーションは比較的少数です。

3. アダプター モードの長所と短所

利点:

  • クライアントはアダプターを通じてターゲット インターフェイスを透過的に呼び出すことができます

  • 既存のクラスを再利用します。プログラマーは、元のコードを変更して既存のアダプター クラスを再利用する必要はありません。

  • ターゲット クラスとアダプター クラスを解決しないでください。結合することで問題が解決されます。ターゲット クラスとアダプター クラス間のインターフェイスに一貫性がない

  • 多くのビジネス シナリオで開始と終了の原則に準拠します

欠点:

  • アダプターの作成プロセスは、ビジネス シナリオに基づいて十分に検討する必要があり、システムの複雑さが増す可能性があります。

  • ##コードの読み取りと操作が困難になります。コードの可読性が低下し、アダプターを過度に使用するとシステム コードが乱雑になります。

4. アダプター パターンの構造と実装

(次の構造はインターネットから参照されます)

パターンの構造:

  • ターゲット インターフェイス: 現在のシステム ビジネスで期待されるインターフェイス。抽象クラスまたはインターフェイスにすることができます

  • Adapte クラス: アクセスして適用される既存のコンポーネント ライブラリ内のコンポーネント インターフェイスです。

  • Adapter クラス: コンバータです。継承 または、アダプター オブジェクトを参照し、アダプター インターフェイスをターゲット インターフェイスに変換し、クライアントがターゲット インターフェイスの形式でアダプターにアクセスできるようにします。

クラス アダプター パターンの構造:

Java アダプター パターンを理解して使用するにはどうすればよいですか?

オブジェクト アダプター パターンの構造:

Java アダプター パターンを理解して使用するにはどうすればよいですか?

5. アダプター パターンのコード実装

A組み合わせを使用する アダプターの実装方法:

現在、ラップトップ用の三相プラグがありますが、充電には二相プラグを使用する必要があるため、そのために二相アダプターをインストールする必要があります。プラグ:

Java アダプター パターンを理解して使用するにはどうすればよいですか?

三相ソケット インターフェース:

/**
 * 三相插座接口
 */
public interface ThreePlugIf {

    //使用三相电流供电
    public void powerWithThree();

}
ログイン後にコピー

国内標準二相ソケット:

/**
 * 国标的二相插座
 */
public class GBTowPlug {
    public void powerWithTwo(){
        System.out.println("使用二相电流供电");
    }
}
ログイン後にコピー

ノートブック:

/**
 * 笔记本
 */
public class NoteBook {

    private ThreePlugIf plug;

    public NoteBook(ThreePlugIf plug){
        this.plug = plug;
    }

    //使用插座充电
    public void charge(){
        plug.powerWithThree();
    }
}
ログイン後にコピー

三相 - 二相ソケット アダプター:

/**
 * 三相转二相的插座适配器
 */

public class TwoPlugAdapter implements ThreePlugIf {


    private GBTowPlug plug;

    public TwoPlugAdapter(GBTowPlug plug) {
        this.plug = plug;
    }

    @Override
    public void powerWithThree() {
        System.out.println("通过转换");
        plug.powerWithTwo();
    }
}
ログイン後にコピー

テスト カテゴリ:

public class Test {

    public static void main(String[] args) {

    GBTowPlug two = new GBTowPlug();
    ThreePlugIf three = new TwoPlugAdapter(two);
    NoteBook nb = new NoteBook(three);
    nb.charge();
	}
}
ログイン後にコピー

出力結果:

二相電流を介して給電変換


結合方式を採用したアダプタをオブジェクトアダプタと呼びます

機能:

「アダプタ」をオブジェクトとしてアダプタクラスに結合し、対象を変更します。インターフェースのパッケージ化 アダプター

#B に対して、継承を使用してアダプターを実装します:

アダプターの継承:Java アダプター パターンを理解して使用するにはどうすればよいですか?

/**
 * 采用继承方式的插座适配器
 */
public class TwoPlugAdapterExtends extends GBTowPlug implements ThreePlugIf{
    @Override
    public void powerWithThree() {
        System.out.println("借助继承适配器");
        this.powerWithTwo();
    }
}
ログイン後にコピー

テスト クラス:

public class Test {

    public static void main(String[] args) {

    GBTowPlug two = new GBTowPlug();
    ThreePlugIf three = new TwoPlugAdapter(two);
    NoteBook nb = new NoteBook(three);
    nb.charge();

    //使用继承方法
    three = new TwoPlugAdapterExtends();
    nb = new NoteBook(three);
    nb.charge();
}
}
ログイン後にコピー

出力:

変換による

二相電流による電力供給

継承アダプタの助けを借りて
二相電流による電力供給


継承方法をクラスアダプタと呼びます

特徴:

互換性のないインターフェースを多重継承することで、対象インターフェースのマッチングを実現し、適応を実現します。単一クラスで実現

6. アダプターパターンの適用シナリオ

以前開発したシステムには新システムの機能要件を満たすクラスがあったが、そのインターフェースは新しいシステムのインターフェースと矛盾しています
  • サードパーティが提供するコンポーネントを使用しますが、コンポーネントのインターフェース定義が自分で必要とするインターフェース定義と異なります

以上がJava アダプター パターンを理解して使用するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

関連ラベル:
ソース:yisu.com
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート