5.アダプタモード

アダプタモード

まず、基本的な導入

1)アダプタモード(アダプタパターン)インターフェイスに変換する、クライアント・インタフェースは、互換性の他の所望の目的を表しています。

2)構造パターンは、アダプタモデルに属し

クラスアダプタモード、オブジェクト・アダプタ・モード、インタフェースアダプタモード:3)の3つのカテゴリに分類

第二に、モデルベースのアダプタ

1.クラスアダプタモード

基本はじめに:アダプタクラス、一体型SRC、DSTのクラスインターフェイスは、完全なsrc-> DSTの適応を達成するために

2.クラスアダプタモデルアプリケーション例

1)適用例:

ライフ例は充電器を説明するために、充電器自体が(によって適応)と同等アダプタ、220V AC同等SRCで、DSTの目標は、5VのDCです

図2)分析。

3)コードの実装

public class Client {

    public static void main(String[] args) {
        System.out.println(" === 类适配器模式 ====");
        Phone phone = new Phone();
        phone.charging(new VoltageAdapter());
    }
}
//适配接口
public interface IVoltage5V {
    public int output5V();
}
//被适配的类
public class Voltage220V {
    //输出220V的电压
    public int output220V() {
        int src = 220;
        System.out.println("电压=" + src + "伏");
        return src;
    }
}
//适配器类
public class VoltageAdapter extends Voltage220V implements IVoltage5V {
    @Override
    public int output5V() {
        //获取到220V电压
        int srcV = output220V();
        int dstV = srcV / 44 ; //转成 5v
        return dstV;
    }
}
public class Phone {
    //充电
    public void charging(IVoltage5V iVoltage5V) {
        if(iVoltage5V.output5V() == 5) {
            System.out.println("电压为5V, 可以充电~~");
        } else if (iVoltage5V.output5V() > 5) {
            System.out.println("电压大于5V, 不能充电~~");
        }
    }
}

3.ノートとクラスアダプタパターンの詳細

1)Javaは単一継承され、すべてのクラスがSRCアダプタクラスを継承する必要があり、それはdstがインターフェイスでなければならない必要があるため、欠点と考えることができ、一定の制限があります

2)SRCアダプタクラスのメソッドは、使用のコストを増加させる、露出されます。

第三に、オブジェクトアダプタモード

1.基本はじめに

1)同じクラスのアダプタモードを持つが、変更アダプタクラス、継承されていないSRCクラス、2番目のクラスのホールドのsrcインスタンスを作成しますが、それは互換性の問題が解決されました。すなわち:クラス・インタフェース・DSTを実装SRCクラスを保持します

2)「合成多重原理」、システム(重合における対応関係を利用する)代わりに継承

3)オブジェクトアダプタモードアダプタは、一般的にモデルとして使用されています

2.図の分析(アダプタのみを変更する必要があります)

3.コードの実装

//适配器类
public class VoltageAdapter  implements IVoltage5V {

    private Voltage220V voltage220V; // 关联关系-聚合

    //通过构造器,传入一个 Voltage220V 实例
    public VoltageAdapter(Voltage220V voltage220v) {
        this.voltage220V = voltage220v;
    }

    @Override
    public int output5V() {
        int dst = 0;
        if(null != voltage220V) {
            int src = voltage220V.output220V();//获取220V 电压
            System.out.println("使用对象适配器,进行适配~~");
            dst = src / 44;
            System.out.println("适配完成,输出的电压为=" + dst);
        }
        return dst;
    }
}

4.注意事項や詳細

合成多重化原則、代わりに継承し、アダプターを解決しなければならないクラスの組み合わせは、srcの制限を継承し、DSTはもはやできなくインタフェースを必要としなければなりません

第四に、インタフェースアダプタモード

1.コアアイデア:

何インターフェイスが完全達成するための方法を提供しない場合、それは抽象クラスインターフェースを実装し、各インターフェイスのためのデフォルトの方法を(ヌル方法)を実施するように設計されてもよい、抽象クラスは、選択的カバレッジ親のサブクラスであります需要を達成するためのいくつかの方法。

図2.分析

3.コードの実装

public interface Interface4 {
    public void m1();
    public void m2();
    public void m3();
    public void m4();
}
//在AbsAdapter 我们将 Interface4 的方法进行默认实现
public abstract class AbsAdapter implements Interface4 {
    //默认实现
    public void m1() {
    }
    public void m2() {
    }
    public void m3() {
    }
    public void m4() {
    }
}
public class Client {
    public static void main(String[] args) {
        AbsAdapter absAdapter = new AbsAdapter() {
            //只需要去覆盖我们 需要使用 接口方法
            @Override
            public void m1() {
                System.out.println("使用了m1的方法");
            }
        };
        absAdapter.m1();
    }
}

五、SpringMVC Frameworkアプリケーションのソースコード解析

アダプタパターンを用いHandleAdapter 1)SpringMvc、

2)HandlerAdapter分析を使用する理由:

私たちは、複数の実装を持っている、プロセッサの種類を見ることができ、通話が直接法は、コントローラを呼び出すかどうかを判断する方法ではありません、あなたは他の場合に実行する、その後でどのタイプかを決定するために呼び出す必要があるときに使用する必要があり、続いて拡張子は、元のコードを変更する必要があります。

3)ソースコード解析

図源クラスの4)分析

VI NotesとAdapterパターンの詳細

1)SRCに基づいており、という3つの名前のアダプタを与えることをどのような形です。

2)クラスアダプタ:SRCでのアダプターのクラス、継承など

オブジェクトアダプタ:オブジェクトとして、SRC、ホールド

インタフェースアダプタ:インタフェースとしてSRC、

おすすめ

転載: www.cnblogs.com/chao-zjj/p/11299990.html