デザインモードのアダプタモード/外観モード

アダプターモード

 

<アダプタモードの主な機能は、インターフェイス切り替えることです。元のインターフェイス仕様に従わないクラスに新しいクラスを追加する場合、追加されたクラスをラップして元のインターフェイスを実装するアダプタークラス(元のクラスへの参照があります)を定義できます。実際の呼び出しは引き続き適応の方法。カスタマーサービス側のコードを変更することなく、元のインターフェース仕様に準拠していない新しいクラスを古いシステムに追加することができます>

 

 

[画像ソースBaidu百科事典]

 

 

実際には、さまざまなUSBからインターフェイス、HDMIからインターフェイスなど、多くのアダプタモードのシナリオがあります。

 

                   

[画像ソースBaidu百科事典]

 

 

同様に、ソフトウェアでこのモードを使用することがよくあります。このモードについては、以下の具体例で説明します。

 

ここにはUSBインターフェースがあり、これを介して、マシンは接続されているデバイスから送信された情報を取得できます。

interface USB{
    
    //该接口可以读取连接他设备的信息或者向其中写如数据
    public void read();
    public void write();

}

彼の装備のこれ

class USB1 implements USB{

    public void read(){
        //读取设备信息
    }

    public void wirte(){
        //向设备写入信息
    }
}

これがカスタマーサービスコードです

class Client{
    USB usb;    
    
    public void setUSB(USB usb){
        this.usb = usb; 
    }

    public static void main(String[] args){
        Client c = new Client();
        c.setUSB(new USB1());

        usb.read();  //通过接口读取信息
        usb.write(); //通过接口写入信息
    }

}

USBインターフェースクラスが実装されている限り、カスタマーサービス側が直接操作してデータの読み書きができることがわかります。

ただし、現時点では、メソッドを作成するためのインターフェイス仕様に準拠していないクラスがあります。次のクラス

class IODev{
    
    public void readByte(){
        //具体操作
    }

    public void writeByte(){
        //具体操作
    }

}

このクラスのインターフェイス仕様に準拠していないクライアントは、このクラスを直接使用できません。しかし、現時点では、IODevコードを記述して記述し、変更したくない(そのようなクラスが多数ある可能性があります)、およびカスタマーサービスコードは変更したくない(変更にはさまざまなコード変更が含まれる可能性があります)。そこで、カスタマーサービス側に合わせて新しいクラスを設計しました。これは、アダプタクラスと呼ばれるものです。

class IODevToUSB implements USB{
    public IODev ioDev;
    
    public void read(){
        ioDev.readByte();
    }
    
    pulbic void write(){
        ioDev.write();
    }
}

このクラスの役割は、主に、コード間の非互換性に適応するようにインターフェースを変換することです。このクラスは実際には不適切なクラスをカプセル化しているため、カスタマーサービス側は呼び出し元のコードに注意を払う必要がなく、元のコードを変更せずにシステムを新しいクラスと互換性のあるものにすることができます。

実際、アダプタクラスは、複数の互換性のないクラスに適応するために複数のインターフェイス仕様を実装し(Javaで複数のインターフェイスを実装できます)、これらのクラスをカプセル化してシステムに適応させることもできます。もちろん、この適応はクラスであり、適応されたサブクラスを受け入れることもできます。

上記は、インターフェースを実装することでアダプタモードを実装するためのものです。実際、継承によって実装することもできますが、2つのクラスを継承する必要があります。Javaは複数の継承をサポートしていません。この状況の例を次に示します。

 

 

 

 

 

外観モード

 

<外観モードはインターフェースを簡素化するように設計されています。このモードとアダプターモードには多くの類似点があります。どちらもクラスをカプセル化しますが、意図は異なります。1つはインターフェース変換用で、もう1つはインターフェースを簡素化するためのものです。>

[画像ソースBaidu百科事典]

 

 

 

 

このモードは、基になる特定のさまざまなクラスとメソッドをデコレータクラスにカプセル化するためのものであり、カスタマーサービス側はデコレータクラスを作成し、そのメソッドを実行していくつかの複雑なプロセスを実行します。カスタマーサービス側は、誰のコードが呼び出されているかを知る必要がありません。これにより、カスタマーサービス側も特定のクラスから切り離されます。

たとえば、実際の例を挙げると、象を冷蔵庫に入れるときは、最初に冷蔵庫を開け、象を入れて、冷蔵庫を閉じる必要があります。このプロセスには、人、象、そして、  Rのefrigerator  。これらのクラスをカスタマーサービス端末からのみ作成する場合、コードは非常に面倒に見える可能性があります。したがって、これらのクラスをカプセル化する外観クラスを作成し、デコレータは象を冷蔵庫に入れるメソッドを設定し(メソッドには特定の手順が含まれます)、カスタマーサービス側はこの外観クラスを持っているだけで、このメソッドを呼び出すことができます。複雑に見えることを成し遂げる。

 

外観モデルは比較的単純なので、分析用の特定のコードは記述しません。

おすすめ

転載: blog.csdn.net/weixin_41237676/article/details/102525097
おすすめ