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

高洛峰
リリース: 2017-01-19 16:12:38
オリジナル
1526 人が閲覧しました

[本文]

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 サイトに注目してください。

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