ホームページ > Java > &#&チュートリアル > Java デザイン パターン分析アダプター パターン (詳細な例)

Java デザイン パターン分析アダプター パターン (詳細な例)

WBOY
リリース: 2022-04-27 19:33:31
転載
3321 人が閲覧しました

この記事では、java に関する関連知識を提供します。主にデザイン パターンに関連する問題を紹介し、主にアダプター パターンについて説明します。アダプター パターンは主にクラスのインターフェイスを変換するために使用されます。クライアントが望むターゲットクラス形式に変換することで、本来互換性のないクラスが連携して動作し、ターゲットクラスとアダプタークラスを分離できるようになります。

Java デザイン パターン分析アダプター パターン (詳細な例)

## 推奨学習: 「

java ビデオ チュートリアル

1. アダプター モードとは:

アダプター モードは主に、クラスのインターフェイスをクライアントが望むターゲット クラス形式に変換するために使用され、本来互換性のないクラスが連携してターゲット クラスとアダプター クラスを分離できるようにします。また、「オープニングとクローズ」にも準拠します。原則" " を使用すると、元のコードを変更せずに新しいアダプター クラスを追加できます。アダプター クラス内の特定の実装のカプセル化はクライアント クラスに対して透過的であり、アダプターの再利用性が向上しますただし、欠点もあります。それは、アダプターを交換する実装プロセスがより複雑であることです。

したがって、アダプター モードは、次のシナリオに適しています。

    (1) システムは既存のクラスを使用する必要があり、これらのクラスのインターフェイスは、システムインターフェース。
  • (2) サードパーティ製コンポーネントを使用する場合、コンポーネントのインターフェイス定義が独自の定義と異なる場合、独自のインターフェイスを変更したくないが、サードパーティ製コンポーネント インターフェイスの機能を使用する必要があります。 。
次の 2 つの非常に鮮明な例は、アダプター パターンが何であるかをよく示しています。

2. 3.アダプター パターンの実装方法:

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

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

##ターゲット インターフェイス (Target ):顧客が期待するインターフェイス。ターゲットは、具体クラス、抽象クラス、またはインターフェイスにすることができます。
  • 適応する必要があるクラス (Adaptee): 適応する必要があるクラス、またはアダプター クラス。
  • アダプター: 適応する必要があるオブジェクトをパッケージ化することにより、元のインターフェイスをターゲット インターフェイスに変換します。
  • // 已存在的、具有特殊功能、但不符合我们既有的标准接口的类
    class Adaptee {
    	public void specificRequest() {
    		System.out.println("被适配类具有 特殊功能...");
    	}
    }
     
    // 目标接口,或称为标准接口
    interface Target {
    	public void request();
    }
     
    // 具体目标类,只提供普通功能
    class ConcreteTarget implements Target {
    	public void request() {
    		System.out.println("普通类 具有 普通功能...");
    	}
    }
     
    // 适配器类,继承了被适配类,同时实现标准接口
    class Adapter extends Adaptee implements Target{
    	public void request() {
    		super.specificRequest();
    	}
    }
     
    // 测试类public class Client {
    	public static void main(String[] args) {
    		// 使用普通功能类
    		Target concreteTarget = new ConcreteTarget();
    		concreteTarget.request();
    		
    		// 使用特殊功能类,即适配类
    		Target adapter = new Adapter();
    		adapter.request();
    	}
    }
    ログイン後にコピー
実行結果:
普通类 具有 普通功能...
被适配类具有 特殊功能...
ログイン後にコピー

2. オブジェクト アダプター モード:

// 适配器类,直接关联被适配类,同时实现标准接口
class Adapter implements Target{
	// 直接关联被适配类
	private Adaptee adaptee;
	
	// 可以通过构造函数传入具体需要适配的被适配类对象
	public Adapter (Adaptee adaptee) {
		this.adaptee = adaptee;
	}
	
	public void request() {
		// 这里是使用委托的方式完成特殊功能
		this.adaptee.specificRequest();
	}
}
 
// 测试类
public class Client {
	public static void main(String[] args) {
		// 使用普通功能类
		Target concreteTarget = new ConcreteTarget();
		concreteTarget.request();
		
		// 使用特殊功能类,即适配类,
		// 需要先创建一个被适配类的对象作为参数
		Target adapter = new Adapter(new Adaptee());
		adapter.request();
	}
}
ログイン後にコピー
テスト結果は上記と一致しています。クラス図から、変更する必要があるのはアダプター クラスの内部構造だけであることもわかります。つまり、アダプター自体が最初に適応されたクラスのオブジェクトを持ち、次に特定の特殊関数をこのオブジェクトに委任する必要があります。実装。オブジェクト アダプター モードを使用すると、Adapter クラス (適応クラス) は、受信した Adapte オブジェクトに基づいて複数の異なる適応クラスに適応できます。もちろん、この時点で、複数の適応クラスまたは抽象クラスのインターフェイスを抽出できます。オブジェクトアダプターのパターンがより柔軟になっているようです。

3. インターフェイスのアダプター モード:

作成するインターフェイスに複数の抽象メソッドが存在する場合があります。インターフェイスの実装クラスを作成する場合、それらは次のようにする必要があります。このインターフェースのすべてのメソッドは、すべてのメソッドが必要なわけではなく、一部だけが必要な場合もあるため、明らかに無駄になることがあります。この問題を解決するために、インターフェースのアダプター・モードを導入します。抽象クラス 、この抽象クラスはインターフェイスとすべてのメソッドを実装します。元のインターフェイスは扱わず、抽象クラスとのみ連絡するため、クラスを作成し、抽象クラスを継承し、必要なメソッドを書き直します。 。クラス図を見てください:

これは簡単に理解できますが、実際の開発では、このインターフェイスで定義されているメソッドが多すぎることがよくあります。一部の実装クラスでは必須です。コードを見てください:

public interface Sourceable {
	
	public void method1();
	public void method2();
}
ログイン後にコピー

抽象クラス Wrapper2:

public abstract class Wrapper2 implements Sourceable{
	
	public void method1(){}
	public void method2(){}
}

public class SourceSub1 extends Wrapper2 {
	public void method1(){
		System.out.println("the sourceable interface's first Sub1!");
	}
}

public class SourceSub2 extends Wrapper2 {
	public void method1(){
		System.out.println("the sourceable interface's second Sub2!");
	}
}
ログイン後にコピー
public class WrapperTest {
 
	public static void main(String[] args) {
		Sourceable source1 = new SourceSub1();
		Sourceable source2 = new SourceSub2();
		
		source1.method1();
		source1.method2();
		source2.method1();
		source2.method2();
	}
}
ログイン後にコピー

実行結果:

the sourceable interface's first Sub1!
the sourceable interface's second Sub2!
ログイン後にコピー

推奨学習: 「

Java ビデオ チュートリアル

以上がJava デザイン パターン分析アダプター パターン (詳細な例)の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

関連ラベル:
ソース:csdn.net
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート