検索
ホームページJava&#&チュートリアルJava 設計パターンの最初の紹介 アダプター パターン

[本文]

Android で最も重要かつ使いにくい UI コントロールは ListView リスト コントロールであることはわかっています。したがって、これを柔軟に使用したい場合は、やはりアダプターを使用する必要があると思います。 Java のアダプター パターンを学習してください (将来使用できるかどうかは関係ありません)。結局のところ、Java 言語は Android 開発の重要な基盤です。

アダプター パターンを完全に理解すると、学習すべき知識がたくさんあります。たとえば、アダプター パターンには、クラス アダプター パターンとオブジェクト アダプター パターンの 2 つの異なる形式があります。ただし、初心者としては、オーケストレーション モードの入門知識を学ぶだけであり、将来的には改善し続けます。コーディングの道で苦労している子供たちが文句を言わないことを願っています→_→

1. アダプターの導入

•クラスのインターフェースを顧客が望む別のインターフェースに変換します。アダプター パターンを使用すると、インターフェースに互換性がないために連携できないクラスを連携させることができます。
•アダプター パターンは、最新の Java フレームワークで非常に一般的に使用されています。このモードは、既存のクラスを使用したいが、そのクラスがインターフェイス要件を満たしていない場合、または適切なインターフェイスを提供しない他のクラスに適応する再利用可能なクラスを作成する必要がある場合のシナリオに適しています。

2. リンゴとオレンジの例

アダプターのアイデアは、次の簡単な例で説明できます。この例では、オレンジをリンゴに「はめ込む」ことを目的としています。以下の図に示すように:

Java 設計パターンの最初の紹介 アダプター パターン

上の図の下半分でわかるように、アダプターには Orange インスタンスが含まれており、Apple クラスを継承しています。オレンジ色のオブジェクトがアダプター内に配置されているため、オレンジ色はリンゴのように動作します。対応する論理図は次のとおりです。

Java 設計パターンの最初の紹介 アダプター パターン

3. ソケットボックスプラグの例

Java 設計パターンの最初の紹介 アダプター パターン

上の図では、中央のアダプターを介して右のプラグを左のソケットに正常に接続できます。

4. プラグ アダプターのコード実装

/**
  适配器模式( Adapter ):将一个类的接口转换成客户希望的另外一个接口。
  适配器模式使得原本由于接口不兼容而不能一起工作的那些类可以一起工作。
*/
class AdapterDemo{
  public static void main(String[] args){
    //电源A开始工作
    PowerA powerA = new PowerAImpl();
    start(powerA);
    PowerB powerB = new PowerBImpl();
    PowerAAdapter pa = new PowerAAdapter(powerB);
    start(pa);
  }
  //定义方法:电源A工作
  public static void start(PowerA powerA){
    System.out.println("....一些重复的代码.....");
    powerA.insert();
    System.out.println("....一些重复的代码.....\n");
  }
 
  /**
  public static void start(PowerB powerB){
    System.out.println("....一些重复的代码.....");
    powerB.connect();
    System.out.println("....一些重复的代码.....");
  }
  */
}
//定义适配器类
class PowerAAdapter implements PowerA{
  private PowerB powerB;//要进行适配的接口
   
  public PowerAAdapter(PowerB powerB){
    this.powerB = powerB;
  }
  //实现接口PowerA,则必然要实现PowerA里面的方法
  public void insert(){
    powerB.connect();
  }
}
/**
  电源A接口
*/
interface PowerA{
  public void insert();
}
class PowerAImpl implements PowerA{
  public void insert(){
    System.out.println("电源A接口插入,开始工作");
  }
}
/**
  电源B接口
*/
interface PowerB{
  public void connect();
}
class PowerBImpl implements PowerB{
  public void connect(){
    System.out.println("电源B接口已连接,开始工作");
  }
}

この例では、PowerB が PowerA の Start() メソッドのコードを呼び出すようにします。もちろん、コメントアウトされた 23 行と 25 行は繰り返したくないのです。コードの。このとき、アダプターモードを使用できます。

上記のコードの説明:

行 30: アダプターの定義を開始します。これはコア コードの始まりでもあります。

行 33 と 34: コンストラクター メソッドを通じて PowerB を渡します。 37: PowerA インターフェイスを実装するには、PowerA でメソッド insert() を実装する必要があります。

38 行目: PowerA の insert() メソッドで、PowerB の connect() メソッドを呼び出します。行 10、11、および 12 の意味は次のとおりです。新しい PowerB を作成するときに、それをアダプター PowerAAdapter に渡し、アダプターを起動すると、PowerB は行 16、24、および 18 のコードを実行します。

注: アダプター内でコードの 24 行目をコードの 17 行目に置き換えているため、16、24、および 18 の順序は間違っていません。

操作の効果は次のとおりです:


同様に、PowerA を PowerB として使用したい場合は、別のアダプター PowerBAdapter を定義して双方向アダプターを実装できます。

5. 概要Java 設計パターンの最初の紹介 アダプター パターン

上記のコメントアウトされた行 23 と行 25 は、オブジェクト指向の考え方に準拠していないコードが大量に繰り返されていることを示しています。ここで例を想像してみましょう。私たちのプロジェクトはオンラインになっていて顧客によって使用されていますが、その後、いくつかの新しい要件が追加されました。オブジェクト指向にはオブジェクト指向の原則があります。変更に近い (オンラインになった後はコードを変更しないようにしてください。そうしないと連鎖反応が発生し、ここでメソッドを呼び出す他のコードで問題が発生する可能性があります)、および拡張に対してオープン (新規)自分で定義したコード) このメソッドは他の人によって呼び出されていません。もちろん変更できます)。この時点で、アダプターを使用してこれらの繰り返しコードを減らすことができます。


6. オブジェクト指向設計原則

• インターフェース指向プログラミング (抽象指向プログラミング)
• 変更のカプセル化

• より多くの組み合わせを使用し、継承を少なくする

• 変更のために閉じ、拡張のために開く

個人的な感覚、これらの設計原則は、実際に継続的に理解を深めていく必要があるため、ここではあまり説明しません~


以上がこの記事の全内容であり、皆様の学習に役立つことを願っています。また、皆さんも PHP 中国語 Web サイトをサポートしていただければ幸いです。

Java デザイン パターン アダプター パターンに関連するその他の記事については、PHP 中国語 Web サイトに注目してください。

声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
JVMは、さまざまなプラットフォームでガベージコレクションをどのように管理していますか?JVMは、さまざまなプラットフォームでガベージコレクションをどのように管理していますか?Apr 28, 2025 am 12:23 AM

jvmmanagesgarbagecollectionacrossplatformseftivivivivitybyusagenerationalaphadadadaptingtosandhardwaredefferences.itemployscollectorslikeserial、parallel、cms、andg1、各sutitedfordifferentscenarios

なぜJavaコードは変更せずに異なるオペレーティングシステムで実行できるのですか?なぜJavaコードは変更せずに異なるオペレーティングシステムで実行できるのですか?Apr 28, 2025 am 12:14 AM

Javaは、Javaの「Write and Averywherewhere」という哲学がJava Virtual Machine(JVM)によって実装されているため、変更なしで異なるオペレーティングシステムで実行できます。コンパイルされたJavaバイトコードとオペレーティングシステムの間の仲介者として、JVMはバイトコードを特定のマシン命令に変換し、JVMがインストールされた任意のプラットフォームでプログラムが独立して実行できることを確認します。

Javaプログラムをコンパイルして実行するプロセスを説明し、プラットフォームの独立性を強調します。Javaプログラムをコンパイルして実行するプロセスを説明し、プラットフォームの独立性を強調します。Apr 28, 2025 am 12:08 AM

Javaプログラムの編集と実行は、BytecodeとJVMを通じ​​てプラットフォームの独立性を達成します。 1)Javaソースコードを書き、それをbytecodeにコンパイルします。 2)JVMを使用して、任意のプラットフォームでByteCodeを実行して、コードがプラットフォーム間で実行されるようにします。

基礎となるハードウェアアーキテクチャは、Javaのパフォーマンスにどのように影響しますか?基礎となるハードウェアアーキテクチャは、Javaのパフォーマンスにどのように影響しますか?Apr 28, 2025 am 12:05 AM

Javaのパフォーマンスはハードウェアアーキテクチャと密接に関連しており、この関係を理解することでプログラミング機能を大幅に改善できます。 1)JVMは、CPUアーキテクチャの影響を受けるJITコンピレーションを介して、Java Bytecodeを機械命令に変換します。 2)メモリ管理とゴミ収集は、RAMとメモリバスの速度の影響を受けます。 3)キャッシュとブランチ予測Javaコードの実行を最適化します。 4)マルチスレッドと並列処理がマルチコアシステムのパフォーマンスを改善します。

ネイティブライブラリがJavaのプラットフォームの独立性を破ることができる理由を説明してください。ネイティブライブラリがJavaのプラットフォームの独立性を破ることができる理由を説明してください。Apr 28, 2025 am 12:02 AM

ネイティブライブラリを使用すると、これらのライブラリはオペレーティングシステムごとに個別にコンパイルする必要があるため、Javaのプラットフォームの独立性が破壊されます。 1)ネイティブライブラリはJNIを介してJavaと対話し、Javaが直接実装できない機能を提供します。 2)ネイティブライブラリを使用すると、プロジェクトの複雑さが増し、さまざまなプラットフォームのライブラリファイルの管理が必要です。 3)ネイティブライブラリはパフォーマンスを改善できますが、それらは注意して使用し、クロスプラットフォームテストを実施する必要があります。

JVMはオペレーティングシステムAPIの違いをどのように処理しますか?JVMはオペレーティングシステムAPIの違いをどのように処理しますか?Apr 27, 2025 am 12:18 AM

JVMは、JavanativeInterface(JNI)およびJava Standard Libraryを介してオペレーティングシステムのAPIの違いを処理します。1。JNIでは、Javaコードがローカルコードを呼び出し、オペレーティングシステムAPIと直接対話できます。 2. Java Standard Libraryは統一されたAPIを提供します。これは、異なるオペレーティングシステムAPIに内部的にマッピングされ、コードがプラットフォーム間で実行されるようにします。

Java 9で導入されたモジュール性は、プラットフォームの独立性にどのように影響しますか?Java 9で導入されたモジュール性は、プラットフォームの独立性にどのように影響しますか?Apr 27, 2025 am 12:15 AM

modularitydoesnotdirectlyectlyectjava'splatformindepensence.java'splatformendepenceismaindainededainededainededaindainedaindained bythejvm、butmodularityinfluencesApplucationStructure andmanagement、間接的なインパクチャプラット形成依存性.1)

ByteCodeとは何ですか?また、Javaのプラットフォームの独立性とどのように関係していますか?ByteCodeとは何ですか?また、Javaのプラットフォームの独立性とどのように関係していますか?Apr 27, 2025 am 12:06 AM

bytecodeinjavaisthe intermediaterepresentationthateNablesplatformindepence.1)javacodeis compiledintobytecodestoredin.classfiles.2)thejvminterpretsorcompilesthisbytecodeintomachinecodeatime、

See all articles

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover

AI Clothes Remover

写真から衣服を削除するオンライン AI ツール。

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

Video Face Swap

Video Face Swap

完全無料の AI 顔交換ツールを使用して、あらゆるビデオの顔を簡単に交換できます。

ホットツール

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

ZendStudio 13.5.1 Mac

ZendStudio 13.5.1 Mac

強力な PHP 統合開発環境

SublimeText3 中国語版

SublimeText3 中国語版

中国語版、とても使いやすい

SublimeText3 Mac版

SublimeText3 Mac版

神レベルのコード編集ソフト(SublimeText3)

SublimeText3 Linux 新バージョン

SublimeText3 Linux 新バージョン

SublimeText3 Linux 最新バージョン