デザインパターン - アダプタモード(オブジェクトアダプタ)

国民の関心番号JavaStorm得るより多くのエキサイティング。

2つのクラスがインタフェースのミスマッチによって一緒に仕事をしていたそうという、別のを期待するクライアント・インタフェースへのクラスのインターフェイスは、一緒に仕事することはできません。

シーン解析

音楽への充電のために聞きながら、例えば、私たちのモバイルインターフェース6キビの電話は、Cインタフェースを入力します。標準インターフェースは、ポートタイプCを充電、3.5ミリメートルヘッドフォンジャックを有する携帯電話です。6キビの電話で音楽を聴くために、私たちだけで3.5ミリメートルヘッドフォン場合さて、あなたは歌を達成するために、私たちの目標インターフェイス3.5ミリメートルヘッドホンキビタイプC 6に適合するアダプタを必要としています。

生活の中でアダプタパターンは、そのようなあなたのラップトップの電源アダプタとして、まだ非常に一般的ですが、あなたは、ノートブック、まだ仕事しながら、110〜220Vの電源との間で変化を使用することができ、これは簡単に言えば良いのアダプタモードの現れであり、 Adapterパターンは、他の一方で、別のインターフェイスまたはクラスにインターフェイスまたはクラスを変換することで、アダプタモードは、パッケージのモードがあり、なぜですか?これは、ターゲットクラスのインタフェースにパッケージ化Adaptee、他のliangniuに詰め衣類の層を、追加します。デコレーターの詳細は、記事の履歴を参照してください。

UML类图

ここに画像を挿入説明

  • ターゲットターゲットの役割は:この役割はどのようなインターフェース、他のクラスに変換されるように定義され、インターフェースは我々が期待するもので、例としては、私たちのキビ6タイプCインタフェースです。
  • アダプターその役割:どのように変換、元の役割にターゲット役割へ:Adapterパターンの中心的な役割、他の二つの役割が既に存在役割があり、およびアダプタの役割が新たに確立する必要があり、その役割は非常に簡単ですか?参考相続または保留クラスを介して関連。例では、当社のC型インターフェースコンバータです。
  • Adapteeソースの役割:あなたはすでに、うまく機能クラスやオブジェクト、アダプタを介してパッケージの役割を既存され、それは新しい、美しい役割になりますソースの役割であり、「誰が」、ターゲットの役割に変換したいです。当社の3.5mmヘッドホンジャックインターフェースその例では。

コードの戦闘

  1. まず、ターゲットのターゲットの役割を定義しました。それが私たちのキビ6タイプCインタフェースです。そして、携帯電話のデフォルトの実装。
/**
 * Project: com-zero-design-stu
 * File created at 2019/6/24 19:45
 */
package com.zero.headfirst.adapter.objects;

/**
 * 通过小米6手机的 type-c 接口听歌,也可以充电(Target 角色)
 * @date 2019/6/24 19:45
 */
public interface XiaoMi6Interface {
    /**
     * 听歌
     */
    void listenMusic();

}

そして、キビ6タイプCのデフォルトの機能が達成するために

/**
 * Project: com-zero-design-stu
 * File created at 2019/6/24 20:02
 */
package com.zero.headfirst.adapter.objects;

/**
 * 小米六 type c 接口默认实现功能
 * @date 2019/6/24 20:02
 */
public class XiaoMi6InterfaceImpl implements XiaoMi6Interface {
    @Override
    public void listenMusic() {
        System.out.println("通过 type c 接口的耳机听歌");
    }
}

  1. Adaptee当社の3.5mmヘッドホンインターフェースである私たちの役割を定義します。
package com.zero.headfirst.adapter.objects;

/**
 * 普通手机通用 接口 ,对应的3.5mm 耳机孔
 * @date 2019/6/25 16:28
 */
public interface CommonPhoneInterface {
    /**
     * 听歌
     */
    void listenMusic();

}

public class CommonPhoneImpl implements CommonPhoneInterface {
    @Override
    public void listenMusic() {
        System.out.println("标准手机 3.5 mm 耳机接口听歌");
    }

}
  1. その後、我々は役割アダプタアダプタでインターフェイスコンバータを、定義します。ここでは、アダプタへの参照を保持するように構成されているオブジェクトアダプタモードを使用します。ターゲット・インタフェースを実現しながら。
public class TypeC2HeadphoneAdapter implements XiaoMi6Interface {

    private CommonPhoneInterface commonPhoneInterface;

    public TypeC2HeadphoneAdapter(CommonPhoneInterface commonPhoneInterface) {
        this.commonPhoneInterface = commonPhoneInterface;
    }

    @Override
    public void listenMusic() {
        System.out.println("通过 type c 转 3.5mm适配器将目标 type c 接口适配上3.5mm接口。");
        commonPhoneInterface.listenMusic();
    }

}
  1. テスト
public class Client {
    public static void main(String[] args) {
        //被适配者 3.5毫米耳机
        CommonPhoneInterface headPhone = new CommonPhoneImpl();
        //适配器
        TypeC2HeadphoneAdapter typeC2HeadphoneAdapter = new TypeC2HeadphoneAdapter(headPhone);
        //通过适配器实现了听歌
        typeC2HeadphoneAdapter.listenMusic();
    }
}

印刷結果

通过 type c 转 3.5mm适配器将目标 type c 接口适配上3.5mm接口。
标准手机 3.5 mm 耳机接口听歌

概要

我々は、ターゲットの役割のインタフェースを変更することはできません場合は、我々はインターフェイスを使用しますが、アダプタモードを使用することができます変換するようになって。

Decoratorパターンは、多重同じインタフェースの機能強化と新機能に焦点を当てています。

複数のパブリック番号心配をご覧ください。
ここに画像を挿入説明

公開された28元の記事 ウォンの賞賛2 ビュー1469

おすすめ

転載: blog.csdn.net/qq_14855971/article/details/93631545