5.デザインモードのアダプタモード

デザインモードのアダプタモード

目次

デザインモードのアダプタモード

1つは、アダプタモードの基本的な紹介です。

2、クラスアダプタモード

2.1、UML图

2.2、デモ例

2.3。クラスアダプタモードの注意事項と詳細

3、オブジェクトアダプタモード

3.1、UML图

3.2オブジェクトアダプタモードの概要

3.3、デモ例

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

4.1、UML图

4.2。インターフェースアダプタモードの概要

4.3、デモ例

第五に、SpringMVCフレームワークアプリケーションのアダプターパターンのソースコード分析

第六に、アダプタモードの注意事項と詳細


1つは、アダプタモードの基本的な紹介です。

基本的な紹介

1)アダプタパターンは、特定のクラスのインターフェイスをクライアントが期待する別のインターフェイス表現に変換します。主な目的は互換性であり、インターフェイスの不一致のために連携できない2つのクラスが連携できます。そのエイリアスはラッパーです

2)アダプタモードは構造モードです

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

動作原理

1)アダプタモード:あるクラスのインターフェイスを別のインターフェイスに変換します。元のインターフェイスと互換性のないクラスを互換性のあるものにします。

2)ユーザーの観点からは、一致した人物は見えず、分離されています

3)ユーザーは、アダプターによって変換されたターゲットインターフェースメソッドを呼び出し、次にアダプターは、適応された人の関連するインターフェースメソッドを呼び出します。

4)ユーザーがフィードバック結果を受け取ったとき、ユーザーはターゲットインターフェイスとのみ対話していると感じます

2、クラスアダプタモード

2.1、UML图

2.2、デモ例

 アプリケーション例の説明

生活の中での充電器の例としてアダプターを説明すると、充電器自体はアダプターに相当し、220V ACはsrc(つまり適応する人)に相当し、ターゲットdst(つまりターゲット)は5VDCです。

適合クラス:220V電圧

//被适配的类
public class Voltage220V {
	//输出220V的电压
	public int output220V() {
		int src = 220;
		System.out.println("电压=" + src + "伏");
		return src;
	}
}

アダプターインターフェース:5V電圧

//适配接口
public interface IVoltage5V {
	public int output5V();
}

 

アダプタカテゴリ:220V電圧を継承し、5V電圧インターフェイスを実現

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

	@Override
	public int output5V() {
		// TODO Auto-generated method stub
		//获取到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, 不能充电~~");
		}
	}
}

2.3。クラスアダプタモードの注意事項と詳細

1)Javaは単一の継承メカニズムであるため、クラスアダプタがsrcクラスを継承する必要があるという欠点があります。これには、dstがインターフェイスである必要があり、特定の制限があります。

2)srcクラスのメソッドはアダプタ公開されるため、使用コストも増加します。

3)srcクラスを継承するため、要件に応じてsrcクラスのメソッドを書き換えることができ、アダプタの柔軟性が向上します。

3、オブジェクトアダプタモード

3.1、UML图

3.2オブジェクトアダプタモードの概要

1)基本的な考え方は、srcクラスを継承する代わりに、Adapterクラスが変更されることを除いて、クラスのアダプターモードと同じですが、互換性の問題を解決するためにsrcクラスのインスタンスを保持しますつまり、srcクラスを保持し、dstクラスインターフェイスを実装し、src-> dstの適応を完了します。

2)「合成再利用の原則に従って、システム内の継承関係を置き換えるために関連付け関係を使用してみてください

3)オブジェクトアダプタモードは、一般的に使用されるアダプタモードです。

3.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.1、UML图

4.2。インターフェースアダプタモードの概要

1)いくつかの本は呼ばれます:デフォルトのアダプタパターンまたはデフォルトのアダプタパターン。

2)インターフェイスによって提供されるすべてのメソッドを実装する必要がない場合は、最初にインターフェイスを実装する抽象クラスを設計し、インターフェイスの各メソッドにデフォルトの実装(空のメソッド)を提供してから、のサブクラスを提供できます。抽象クラスは、要件を達成するために親クラスのいくつかのメソッドを選択的にオーバーライドできます

3)インターフェイスがすべてのメソッドを使用したくない状況に適しています

4.3、デモ例

インターフェース:

public interface Interface4 {
	public void m1();
	public void m2();
	public void m3();
	public void m4();
}

 

抽象クラス:

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() {
				// TODO Auto-generated method stub
				System.out.println("使用了m1的方法");
			}
		};
		
		absAdapter.m1();
	}
}

第五に、SpringMVCフレームワークアプリケーションのアダプターパターンのソースコード分析

SpringMvcのHandlerAdapterはアダプタモードを使用します

第六に、アダプタモードの注意事項と詳細

アダプターモードの注意事項と詳細

1)3つの命名方法は、srcがアダプターに(アダプターの形式で)与えられる方法に従って命名されます。

2)クラスアダプタ:クラスによって与えられます。アダプタでは、srcはクラスとして使用され、オブジェクトから継承されます。アダプタ:オブジェクトによって与えられます。アダプタでは、srcはオブジェクトとして与えられ、インターフェイスアダプタ:インターフェイスによって与えられます。アダプタでは、実装するインターフェイスとしてsrcを使用する

3)アダプタモードの最大の機能は、元々互換性のなかったインターフェイスを統合して連携させることです。4)実際の開発では、実現は私たちが説明した3つの古典的な形式に限定されません

おすすめ

転載: blog.csdn.net/qq_45072383/article/details/114037240