Javaデザインモード-フェースモード

2830 ワード

定義#テイギ#
外観モードとも呼ばれ、一般的なデザインモードの一つです.コードには何気なくゲートモードが使用される可能性があり、一部のサードパーティのオープンソースSDKはAPI呼び出しを簡略化し、内部の詳細の露出を減らすために、ゲートモードのようなインタフェースを提供し、開発者の使用を容易にする可能性がある.
外観モードの定義を見てみましょう.
サブシステムの外部とその内部との通信は、統一されたオブジェクトを介して行わなければならない.ゲートモードは、サブシステムがより使いやすいように、高レベルのインタフェースを提供します.
インプリメンテーション
次に、エアコンシステムにより、ドアモードの使用を説明する.まず、エアコンのスイッチシステムを定義します.
public class PowerSystem {

    private boolean started;

    public void powerOn() {
        if (!started) {
            System.out.println("    ");
            started = true;
        }
    }

    public void powerOff() {
        if (started) {
            System.out.println("    ");
            started = false;
        }
    }
}

次にファンシステム:
public class FanSystem {

    public void adjustDegree() {
        System.out.println("      ");
    }

    public void adjustPower() {
        System.out.println("      ");
    }
}

最後に温度制御システムを定義します.
public class TempSystem {

    public void turnUp() {
        System.out.println("    ");
    }

    public void turnDown() {
        System.out.println("    ");
    }
}

エアコン関連の3つのサブシステムを定義したら、ファカイドオブジェクトを定義します.
public class AirController {

    private FanSystem fanSystem = new FanSystem();
    private PowerSystem powerSystem = new PowerSystem();
    private TempSystem tempSystem = new TempSystem();

    public void adjustDegree() {
        powerSystem.powerOn();
        fanSystem.adjustDegree();
    }

    public void adjustWindPower() {
        powerSystem.powerOn();
        fanSystem.adjustPower();
    }

    public void turnUp() {
        powerSystem.powerOn();
        tempSystem.turnUp();
    }

    public void turnDown() {
        powerSystem.powerOn();
        tempSystem.turnDown();
    }

    public void powerOff() {
        powerSystem.powerOff();
    }

    public void powerOn() {
        powerSystem.powerOn();
    }
}

顧客クラスを定義し、エアコンシステム呼び出しをシミュレートします.
public class Client {
    public static void main(String[] args) {
        AirController airController = new AirController();
        airController.turnDown();
        airController.adjustDegree();
        airController.adjustWindPower();
        airController.powerOff();
    }
}

印刷結果:
    
    
      
      
    

理解に難くないが,ファセットモードは各サブシステム間の関連を実現するとともに,サブシステム内部の具体的な実現を気にする必要がなく,AirControllerファセットを統一することでクライアント呼び出しを提供し,使用を簡素化する.
まとめ
フェースモードの利点は明らかであり、その欠点についていくつか説明する必要があり、上記の例によって、フェースモードには以下のいくつかの問題があることが明らかになった.
  • サブシステムの増加または提供されるインタフェースの増加により、ゲートクラスインタフェースが冗長に膨張する.
  • 外観類は開閉原則に従わず、「修正に対して閉鎖し、拡張に対して開放する」という定義に合致せず、業務が変更された場合、直接対外観類を修正する必要がある.
  • Fynn_ , , !