アダプターモード(アダプター)----デザインモード
記事ディレクトリ
それは何ですか?
アダプタパターンは、互換性のない2つのインターフェイス間のブリッジとして機能します。
アダプタモードは、たとえば、カードリーダーがメモリカードとノートブックの間のアダプタとして使用され、現在の変換ソケットが必要な電圧と実際の電圧の不一致を解決するアダプタであるなど、人生から生まれます。
アダプターパターンの簡単な紹介
簡単に言えば、アダプタモードは主に2つの互換性のないインターフェイス接続の問題を解決します。
アダプターパターンのしくみ
簡単に言うと、互換性のないクラスを互換性のあるクラスに変換して、アダプターを介して連携することです。
アダプタパターンを実装する3つの方法
- クラスアダプタ:アダプタクラスは、継承によって適応クラスを継承するため、適応クラスの操作を使用および変更して、作業の互換性を実現できます。
- オブジェクトアダプタ:適応クラスをアダプタクラスに集約し、構築メソッドに従って適応クラスのインスタンスを渡すことにより、アダプタクラスはこのインスタンスに従って動作し、推奨されるインターフェイスの互換性を実現します。
- インターフェイスアダプタ:インターフェイスを継承する抽象クラスを定義することにより、インターフェイス内のすべてのメソッドを上書きして、この抽象クラスを継承するサブクラスがインターフェイス内のメソッドを選択的に使用できるようにします。
ほら、ちょっとわかりづらいですか?関係ありません。実演させていただきますが、誰もが理解できると思います。
アダプタースモールケース
Xiaogaoには携帯電話がありますが、残念ながら電源がなく充電が必要ですが、ソケットは220V、携帯電話の充電電圧は5Vです。このとき、変換する変換ソケットを設計する必要があります。 220Vの電圧を5Vの電圧に変換します。XiaoGaoが設計するのを手伝ってもらえますか?
クラスアダプタを使用した設計
このアダプタは、継承を通じて適応クラスの動作を改善し、それによって電圧互換性を実現します。
ソケット220Vクラス
package com.design_patterns.adapter.classadapter;
public class Voltage220V {
//输出220伏电压
public int output220V(){
int src = 220;
System.out.println("电压 = " + src + "伏");
return src;
}
}
出力電圧が5Vのインターフェース
package com.design_patterns.adapter.classadapter;
public interface IVoltage5V {
public int output5V();
}
電圧変換用クラスアダプタ
package com.design_patterns.adapter.classadapter;
//适配器类
public class VoltageAdapter extends Voltage220V implements IVoltage5V{
//覆写接口中的方法
@Override
public int output5V() {
//获取到220V的电压
int srcV = output220V();
int dstV = srcV / 44; //转成5V
return dstV;
}
}
携帯電話
package com.design_patterns.adapter.classadapter;
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,不可以充电~~~");
}
}
}
クライアントの使用と請求
package com.design_patterns.adapter.classadapter;
public class Client {
public static void main(String[] args) {
System.out.println("====类适配器模式====");
Phone phone = new Phone();
phone.charging(new VoltageAdapter());
}
}
運転結果
====类适配器模式====
电压 = 220伏
电压为5V,可以充电~~~
オブジェクトアダプタを使用した設計
このアダプタは、アグリゲーションによって適合クラスの動作を改善し、それによって電圧互換性を実現します。上記のアダプタとの違いのみを以下に示します。
電圧変換用オブジェクトアダプタ
package com.design_patterns.adapter.objectadapter;
//适配器类
public class VoltageAdapter implements IVoltage5V {
private Voltage220V voltage220V; //关联关系-聚合
//通过构造方法得到Voltage220V的对象实例
public VoltageAdapter(Voltage220V voltage220V) {
this.voltage220V = voltage220V;
}
/**
* 将220V的电压转换为5V的电压的方法
* 返回转换过后的电压
* @return
*/
@Override
public int output5V() {
//获取到220V的电压
int srcV = this.voltage220V.output220V();
int dstV = srcV / 44;
System.out.println("使用对象适配器适配完成!!!");
return dstV;
}
}
クライアントの使用と請求
package com.design_patterns.adapter.objectadapter;
public class Client {
public static void main(String[] args) {
System.out.println("====对象适配器模式====");
Phone phone = new Phone();
phone.charging(new VoltageAdapter(new Voltage220V()));
}
}
運転結果
====对象适配器模式====
电压 = 220伏
使用对象适配器适配完成!!!
电压为5V,可以充电~~~
インターフェイスアダプタ、デフォルトアダプタモード(カスタムスモールケース)
定義されたインターフェース
package com.design_patterns.adapter.interfaceadapter;
public interface Interface4 {
public void m1();
public void m2();
public void m3();
public void m4();
}
定義された抽象クラス
package com.design_patterns.adapter.interfaceadapter;
public abstract class AbsAdapter implements Interface4 {
@Override
public void m1() {
}
@Override
public void m2() {
}
@Override
public void m3() {
}
@Override
public void m4() {
}
}
テスト用のテストクラスを定義する
package com.design_patterns.adapter.interfaceadapter;
public class Client {
public static void main(String[] args) {
AbsAdapter absAdapter = new AbsAdapter() {
/**
* 此时只需要去覆盖我们需要使用的接口方法
*/
@Override
public void m1() {
System.out.println("调用的是子类m1的方法");
}
};
absAdapter.m1();
}
}
運転結果
调用的是子类m1的方法
Hee hee、このケースは非常に単純ですが、実際の開発では依然として非常に役立ちます。実装する必要のあるメソッドのみを実装する抽象クラスアダプターを設計することによって。
要約する
これまでのところ、アダプターの基本的な内容は整理されています、ねえ、多分今回のコーミングは特に鮮やかで面白いものではありません、ただそれを理解してください、ありがとう〜