Javaデザインパターンの外観モード(10)

Javaデザインパターンの外観モード⑩

なんて天才だ!天才は勤勉の結果だと思います。-郭沫若

デザインパターンの学習、近い将来23のデザインパターンについてブログを書きますので、お楽しみに〜
—2021 / 1/11

定義

アピアランスモードは、プロセスモードとも呼ばれます。アピアランスモードは、オープンインターフェイスを定義することにより、サブクラス(特定のコード実装)の詳細を保護するために使用されます。これにより、呼び出し元はこのインターフェイスとの関係のみが必要になり、関係はなくなります。サブクラスの詳細に注意する必要があります(特定のコードの実装)。

Baidu百科事典

使用するシーン

  • 設計の初期段階では、異なるレイヤーを意識的に分離し、レイヤー間に外観モデルを確立する必要があります。
  • 開発段階では、サブシステムはますます複雑になり、外観モードが追加されて、単純な呼び出しインターフェイスが提供されます。

外観モードは一般に「バッファレイヤー」と呼ばれます。

分析

UML类图(1.1)
ここに画像の説明を挿入

UML类图(1.1)対話するときに、クライアントは、各機能と対話する必要があることがわかります

それぞれの機能には一定のつながりがあります。たとえば、パソコンの電源を入れるとエアコンがオンになり、電話をかけるとテレビを見ることができます。

このように、相互作用は管理に役立つだけでなく、コード結合も特に高くなります

このとき、アピアランスモードが使用され、中央に「バッファレイヤー」のレイヤーが追加されます。

UML类图(1.2)唯一のバッファ層とクライアントの相互作用は、あなたがそれぞれのサブクラス(特定の実装コード)の詳細を気にする必要がない場合、これは外観モードであることがわかります
ここに画像の説明を挿入
UML类图(1.2)

コード

エアコンエアコン

public class AirConditioner {
    
    

    private static AirConditioner instance = new AirConditioner();
    private AirConditioner(){
    
    }

    public static AirConditioner getInstance(){
    
    
        return  instance;
    }
    public void open(){
    
    
        Log.i("外观模式","打开了空调");
    }
    public void close(){
    
    
        Log.i("外观模式","关闭了空调");
    }
}

電話携帯電話

public class Phone {
    
    
    private static Phone instance = new Phone();
    private Phone(){
    
    }

    public static Phone getInstance(){
    
    
        return  instance;
    }

    void open(){
    
    
        Log.i("外观模式","打开了手机");
    }

    public void close(){
    
    
        Log.i("外观模式","关闭了手机");
    }

    public void connectWiFi(){
    
    
        Log.i("外观模式","手机 连接了WiFi");
    }
}

コンピュータクラス

public class Computer {
    
    
    private static Computer instance = new Computer();
    private Computer(){
    
    }

    public static Computer getInstance(){
    
    
        return  instance;
    }

    public void open(){
    
    
        Log.i("外观模式","打开了电脑");
    }

    public void close(){
    
    
        Log.i("外观模式","关闭了电脑");
    }
}

テレビ

public class Television {
    
    
    private static Television instance = new Television();
    private Television(){
    
    }

    public static Television getInstance(){
    
    
        return  instance;
    }

    void open(){
    
    
        Log.i("外观模式","打开了电视");
    }

    void close(){
    
    
        Log.i("外观模式","关闭了电视");
    }
}

ファサードバッファーレイヤー:

public class Facade {
    
    

    //空调
    private final AirConditioner airConditioner;
    //电脑
    private final Computer computer;
    //电视
    private final Television television;
    //手机
    private final Phone phone;

	//获取实例
    public Facade() {
    
    
        airConditioner = AirConditioner.getInstance();
        computer = Computer.getInstance();
        television = Television.getInstance();
        phone = Phone.getInstance();
    }

    //打开 空调 电脑 电视 手机
    public void open() {
    
    
        airConditioner.open();
        computer.open();
        television.open();
        phone.open();
    }

    //连接手机WIFI
    public void connectWiFi() {
    
    
        phone.connectWiFi();
    }

    public void close(){
    
    
        airConditioner.close();
        computer.close();
        television.close();
        phone.close();
    }
}

テストコード:

Facade facade = new Facade();

打开 空调 电脑 电视 手机
facade.open();
Log.i("外观模式","=====================");

//连接手机WIFI
facade.connectWiFi();

Log.i("外观模式","=====================");

facade.close();

Log图(2.1)
ここに画像の説明を挿入
利点:

  • 外観モードは、サブシステムの詳細を外観から保護するため、クライアントによるサブシステムの使用の複雑さが軽減されます。
  • 外観モデルを合理的に使用することで、階層をより適切に分割するのに役立ちます
  • クライアントとサブシステム間の疎結合を実現する


注意アピアランスモードを使用する目的でアピアランスモードを使用することはできません!単純なクラスが2つしかない場合は、アピアランスモードを直接使用する必要はなく、直接呼び出すだけで、アピアランスモードを使用してわずかに解決します。より複雑なサブクラス。メンテナンス目的を容易にするため

完全なコード

デザインパターン/デザイン原則のホームページに移動します

オリジナリティは簡単ではありません、あなたの好きなものは私にとってあなたの最大のサポートです、それらを好きになることを忘れないでください〜

おすすめ

転載: blog.csdn.net/weixin_44819566/article/details/112476121