アダプタ
私たちはパターンを学び、最初に名前からそれを理解します。生活の中で一般的なアダプターは電源アダプターです。この機能は、電圧と電流を電化製品に必要な電圧と電流に変換することです。
覚えておく必要があるのは1文だけです。アダプターは、クラスインターフェイスをユーザーが必要とする別のインターフェイス(変換インターフェイス)に変換することです。
iphone11では、iphone12にはさまざまな通信技術があります。ここで、11で5G信号インターフェイスを呼び出したいので、それにアダプターを追加します。
public interface Iphone12 {
void communicateBy5G();
}
public interface Iphone11 {
void communicateBy4G();
}
public class Iphone11Impl implements Iphone11 {
@Override
public void communicateBy4G() {
System.out.println("communicate by 4G!");
}
}
public class Iphone11Adapter implements Iphone12 {
Iphone11 iphone11;
public Iphone11Adapter(Iphone11 iphone11) {
this.iphone11 = iphone11;
}
@Override
public void communicateBy5G() {
iphone11.communicateBy4G();
}
}
/**
** 可以看出虽然创建的对象是iphone12,但实际上使用的是4G通信。
**/
public class Client {
public static void main(String[] args) {
Iphone11 iphone11 = new Iphone11Impl();
Iphone12 iphone12 = new Iphone11Adapter(iphone11);
iphone12.communicateBy5G();
}
}
//communicate by 4G!
例
4Gが実際に使用されていることがわかります。アダプターの役割は、4Gを使用する人が別のクラスを使用しているように見えることですが、実際の操作は元のオブジェクトのままです。
以下は、アダプターモードでのArrays.asList()の使用です。アダプターを読んだ後は、アダプターについての理解が深まると思います。
@SafeVarargs
@SuppressWarnings("varargs")
public static <T> List<T> asList(T... a) {
return new ArrayList<>(a);
}
もう一度見てください
ArrayList(E[] array) {
a = Objects.requireNonNull(array);
}
- Arrays.asList(T ... a)のメソッド知識が空でないかどうかがわかり、アドレスがaに割り当てられていることがわかります。
- したがって、リストの値を変更すると、元の配列の値も変更されます。同じことがその逆にも当てはまります。
asList()を呼び出すとListが返されることがわかりますが、実際のストレージ構造は依然として配列です。ここでは、配列を操作する操作が非表示になっているため、ユーザーは、アダプターのコアアイデアであるリスト(変換インターフェイス)を操作していると考えます。