記事のディレクトリ
1.アダプタモードの概要
1.アダプタモードとは何ですか
**アダプタパターン**はラッパーパターンとも呼ばれ、互換性のない2つのインターフェイス間のギャップを埋めるために存在します。これは構造設計モードに属し、新しい環境で既存のオブジェクトの非互換性の問題を解決することに専念しています。
2.アダプタのビジネスシナリオ
アダプターモードに最も適した実際のシナリオはコンバーターです。コンバーターには多くの種類があります。Goudongでヘッドセットコンバーターを検索できます。
多くの携帯電話メーカーが3.5mmフォーマットを薄くするためにキャンセルしたためです。ヘッドフォンジャック(つまり、私たちの一般的なラウンドヘッドジャック)は、ヘッドフォンジャックと充電ジャックの組み合わせに基づいてヘッドフォンプラグの問題を解決します。だからここに問題があります。多くのイヤホン愛好家はHiFiイヤホンを購入するのに多額のお金を費やしているかもしれません。電話を変更するたびにイヤホンを対応するプラグフォーマットに交換する必要がある場合、コストが高すぎることは間違いありません。プラグフォーマットコンバーターを設計する必要があります。
第二に、アダプタモードの実現
アダプターモードを実装する方法はたくさんありますが、今日は主に、クラスアダプター、オブジェクトアダプター、インターフェイスアダプターの3つの一般的なアダプターモードについて説明します。
1型アダプター
1.クラスアダプタの実装
まず、クラスアダプタパターンの単純な実装を使用します。
(1)ヘッドホンインターフェースを作成する
public interface HeadSet {
// 播放音乐
void music();
// 获取种类
String type();
}
(2)通常の3.5mmヘッドセットを作成します
public class SimpleHeadset implements HeadSet {
protected String type = "3.5mm接口";
public void music() {
System.out.println("播放音乐");
}
@Override
public String type() {
return type;
}
}
(3)コンバーターインターフェースを作成する
public interface TypecHeadSetAdapter {
void transformation();
}
(4)インターフェース変換クラスを作成する
public class SimpleToTypecAdapter extends SimpleHeadset implements TypecHeadSetAdapter {
@Override
public void transformation() {
super.type = "typeC";
}
public SimpleToTypecAdapter() {
transformation();
}
}
(5)携帯電話オブジェクトを作成する
public class Phone {
private HeadSet headSet;
public void check() {
if ("typeC".equals(headSet.type())) {
headSet.music();
} else {
System.out.println("接口格式不符,无法播放音乐");
}
}
public Phone(HeadSet headSet) {
super();
this.headSet = headSet;
}
}
(6)テストクラスを作成する
public class Test {
public static void main(String[] args) {
Phone phone = new Phone(new SimpleToTypecAdapter());
phone.check();
}
}
試験結果:
2.クラスアダプタの設計アイデア
最初に図を見てください。
クラスアダプタは、主に継承された機能を使用して実装されます。主なアイデアは次のとおりです。
- 製品インターフェースの作成
- 適応するクラスを通じて製品インターフェースを実現する
- 新しいサービスは既存のクラスを使用して適応させることができないため、適応させるクラスを変換する必要があります
- アダプタインターフェイスを作成する
- アダプタサブクラスを作成し、クラスを継承して適応させ、アダプタインターフェイスを実装します
- ビジネスの呼び出し元は、アダプタサブクラスを作成できます
2オブジェクトアダプタ
1.オブジェクトアダプタの実装
オブジェクトアダプタアダプタオブジェクトを変更するだけで済みます
public class SimpleToTypeCAdapter implements HeadSet,TypecHeadSetAdapter {
private SimpleHeadset simpleHeadset;
@Override
public void transformation() {
simpleHeadset.type = "typeC";
}
public SimpleToTypeCAdapter(SimpleHeadset simpleHeadset) {
super();
this.simpleHeadset = simpleHeadset;
transformation();
}
@Override
public void music() {
simpleHeadset.music();
}
@Override
public String type() {
return simpleHeadset.type();
}
}
試験結果:
public class Test {
public static void main(String[] args) {
HeadSet simpleToTypeCAdapter = new SimpleToTypeCAdapter(new SimpleHeadset());
Phone phone = new Phone(simpleToTypeCAdapter);
phone.check();
}
}
1.オブジェクトアダプタの設計アイデア
図に示すように、
クラスアダプタとオブジェクトアダプタの違いは、クラスアダプタはオブジェクトの継承によって適応されるのに対し、オブジェクトアダプタは集約によって適応されることを発見した賢い人です。
2-インターフェースアダプター
インターフェイスアダプタのアプリケーションシナリオは、上記の2つのアダプタとは少し異なります。インターフェイスアダプタは通常、特定の複雑なインターフェイスで1つまたはいくつかの方法を使用する場合に使用されます。たとえば、次の10個のメソッドを使用してインターフェイスを作成します。
public interface SourceInterface {
void method01();
void method02();
void method03();
void method04();
void method05();
void method06();
void method07();
void method08();
void method09();
void method10();
}
現時点でインターフェースでmethod01のみを使用したい場合は、どうすればよいですか?非常に単純です。最初に、ターゲットインターフェイスから継承するサブクラスを作成し、デフォルトで空のすべてのメソッドを実装します。
public class Adapter implements SourceInterface {
@Override
public void method01() {
// TODO Auto-generated method stub
}
@Override
public void method02() {
// TODO Auto-generated method stub
}
@Override
public void method03() {
// TODO Auto-generated method stub
}
@Override
public void method04() {
// TODO Auto-generated method stub
}
@Override
public void method05() {
// TODO Auto-generated method stub
}
@Override
public void method06() {
// TODO Auto-generated method stub
}
@Override
public void method07() {
// TODO Auto-generated method stub
}
@Override
public void method08() {
// TODO Auto-generated method stub
}
@Override
public void method09() {
// TODO Auto-generated method stub
}
@Override
public void method10() {
// TODO Auto-generated method stub
}
}
次に、ビジネスコーラーを作成し、内部クラスを介して適応させる必要があるメソッドを書き直します。
public class Test {
public static void main(String[] args) {
Adapter adapter = new Adapter() {
@Override
public void method01() {
System.out.println("适配了方法01");
}
};
adapter.method01();
}
}
試験結果:
インターフェイスアダプタの実現原理
インターフェイスアダプタの実装は非常に簡単です。
- 適応クラスを介してターゲットインターフェイスを継承します
- アダプテーションクラスは、デフォルトで空のすべてのインターフェイスメソッドを実装します
- ビジネスの呼び出し元は、適応クラスを作成し、内部クラスを介して目的のメソッドを呼び出します
3つ目は、アダプタモードの特徴です。
1.アダプターの使用シナリオ
- システムは既存のクラスを使用する必要がありますが、既存のクラスのプロパティは予想とは異なります
- インターフェイス変換を通じて、クラスを別のインターフェイスシステムに挿入します
- 一緒に機能する可能性のある2つのクラス間の接続を確立したい
2.アダプタモードの機能
利点:
- 無関係な2つのクラスを一緒に実行させることができます
- クラスの再利用性の向上
- クラスの透明性の向上
- 高い柔軟性
短所:
- アダプターを過度に使用すると、システムが断片化し、整理と制御が困難になります。
- Javaの単一継承は、適応の柔軟性を制限します。
3.注意が必要な事項
たとえば、適応モードではユーザーが呼び出しているように見えるため、Aインターフェースが呼び出されていることがはっきりとわかりますが、その内部はBインターフェースの実装に適応しています。これにより、アプリケーション適応モードが多すぎて、間違いなくシステムのセマンティクスと抽象化に影響を与えます。それは惨事です。したがって、必要がない場合は、アダプタモードを使用することはお勧めしませんが、潜在的な問題の可能性を減らすために、既存のシステムを直接再構築することをお勧めします。
これで本日の内容は終わりです。ご不明な点がございましたら、個人的にメッセージをお送りいただくか、コメント欄にメッセージを残していただければ、お早めにお答えいたします。やりがいを感じている友達は、3回連続でワンクリックを覚え、ブロガーに注意を払い、迷子にならないで、売春婦になることを拒否してください〜