JAvaモードの------アダプタモード

3323 ワード

アダプタ:他の人の彼女をあなたの彼女に変換するなど、実行できないものを実行可能に変換します.他の人のお金をあなたのお金に変換します.アメリカのパワーを中国のパワーに変える.使用できないインタフェースを使用可能なインタフェースに変換するなど、アダプタと呼ばれます.
OK.本題に入ります........
JDKのGUIでは、有名なマウスリスナーがアダプタのモードや他のものを使っています.
1つのクラスのインタフェースを所望の別のインタフェースに変換することで、インタフェースが一致しないために一緒に仕事ができなかった2つのクラスが一緒に仕事をすることができる.
アダプティブには、クラスアダプタとオブジェクトアダプタがあり、前者は継承を使用し、後者はインデックスを保持します.では、両者にはどんな違いがあるのでしょうか.実際の項目ではどちらを優先すべきでしょうか?下記をご覧ください.
まず例を挙げて説明しますが、アメリカでは標準コンセントが60 HZで、中国では準コンセントが50 HZなので、今はアメリカのコンセントを使う必要があります.直接使うことはできませんが、どうすればいいのでしょうか.60 HZを50 HZに変換するアダプタが必要です.OK.分かったか?コードを見てみましょう.
一、クラスアダプタ
  

package com.stiven.adapter.classadapter;

/**
 *         50HZ 
 *
 * @author  063
 * @version  N/A
 */
public interface Target
{
    public void get50HZ_CH();
}

/**
 *        ,         
 *
 * @author  063
 * @version  N/A
 */
public class SocketAdaptee
{
    public void get60HZ_US()
    {
        System.out.println("      ");
    }
}

/**
 *    ,        
 *
 * @author  063
 * @version  N/A
 */
public class SocketAdapter extends SocketAdaptee implements Target
{

    @Override
    public void get50HZ_CH()
    {
        this.get60HZ_US();
        System.out.println("     ....            ...");
    }
    
}

では、以下のテストクラスを通じて、私たちが必要とするものを得ることができます.

public class Client
{
    public static void main(String[] args)
    {
        Target target = new SocketAdapter();
        target.get50HZ_CH();
    }
}

OK.見えますか?クラスアダプタは、インタフェース内のすべてのメソッドを実装し、被アダプタのすべてまたは一部のメソッドを継承するために、アダプタ内のインタフェースロジックを実装するだけで、ユーザは考えられる効果を達成することができる.
二、対象アダプタ
注意:一部のクラスは上記と同じです.

/**
 *      ,              
 *
 * @author  063
 * @version  N/A
 */
public class ObjectAdater implements Target
{
    /**
     *        ,            
     */
    private SocketAdaptee socketAdaptee;
    
    public ObjectAdater(SocketAdaptee socketAdaptee)
    {
        this.socketAdaptee = socketAdaptee;
    }
    
    @Override
    public void get50HZ_CH()
    {
        socketAdaptee.get60HZ_US();
        System.out.println("     ....            ...");
    }
    
}

public class Client
{
    public static void main(String[] args)
    {
        SocketAdaptee socketAdaptee = new SocketAdaptee();
        ObjectAdater objectAdater = new ObjectAdater(socketAdaptee);
        objectAdater.get50HZ_CH();
        
    }
    
}

OK.見えますか?クラスアダプタとは異なり、オブジェクトアダプタはアダプターの参照を持っています.後で他のオブジェクトを変換する場合は、アダプタを変更します.
ちなみにここでは、JDKのWindowAdapter、MouseAdapterなどのアダプタについては、抽象クラスがすべてのインタフェースを実現する方法であり、開発者にとっては抽象クラスの一部の主法を実現するだけで、インタフェースのすべての方法を実現する必要がなく、便利になった.
では、この2つの異同について何があるのでしょうか.私たちは実際の開発で、どちらを優先すべきでしょうか.
この問題についてはやはりみんなに討論してもらいましょう.