ホームページ >Java >&#&チュートリアル >Java デザイン パターン: 外観パターンの例の分析

Java デザイン パターン: 外観パターンの例の分析

WBOY
WBOY転載
2023-04-20 15:49:081049ブラウズ

モードの紹介

  • ファサード モード (ファサード)、「プロセス モード」とも呼ばれます: ファサード モードは、サブシステム 内の一連のインターフェイス に一貫したインターフェイスを提供します。このモードは、このサブシステムを使いやすくする高レベルのインターフェイスを定義します。

  • 外観モードは、一貫したインターフェイスの詳細を定義することで内部サブシステムを シールドするために使用されます。呼び出し側は、このサブシステムの内部の詳細を気にする必要がなく、このインターフェイスを呼び出すだけで済みます。

UML クラス図

Java デザイン パターン: 外観パターンの例の分析

クラス図分析:

  • Facade: 呼び出し側に統合された呼び出しインターフェイスを提供します。外観クラスをご存知ですか? サブシステムはリクエストを処理する責任を負い、それによって呼び出し元のリクエストを適切なサブシステム オブジェクトにプロキシします。

  • Client: 外観インターフェイスの呼び出し元.

  • SubSystem コレクション : Facade オブジェクトによって割り当てられたタスクを処理するモジュールまたはサブシステムを指します。これが関数の実際のプロバイダーです。

  • ##外観モード ケース:

背景の紹介:

ホームシアターのセットアップ: DVD プレーヤー、プロジェクター、自動スクリーン、サラウンド サウンド、ポップコーンマシン、ホームシアターの使用を完了するために必要ですこの機能は、リモコンを使用して直接制御されます(各デバイスのスイッチを調整します)。プロセスは次のとおりです:

    ポップコーンを開きますマシン
  • スクリーンを置いてください
  • プロジェクターの電源を入れてください
  • ステレオの電源を入れてください
  • DVD の電源を入れて DVD を選択します
  • ポップコーンを手に入れます
  • 照明を暗くします
  • 再生
  • 映画を見た後は、さまざまなデバイスの電源を切ります。

Java デザイン パターン: 外観パターンの例の分析##DVD、ポップコーン、プロジェクター、スクリーン、ステレオ、およびシアターライトのコードは次のとおりです。

public class DVDPlayer {
    // 使用单例模式
    private static  final DVDPlayer instance = new DVDPlayer();
    private DVDPlayer() {}
    public static DVDPlayer getInstance() {
        return instance;
    }
    public void on() {
        System.out.println("dvd 打开了...");
    }
    public void off() {
        System.out.println("dvd 关闭了...");
    }
    public void play() {
        System.out.println("dvd 播放中...");
    }
    public void pause() {
        System.out.println("dvd 暂停了...");
    }
}
public class Popcorn {
    private static final Popcorn instance = new Popcorn();
    private Popcorn(){}
    public static Popcorn getInstance() {
        return instance;
    }
    public void on() {
        System.out.println("爆米花机打开了...");
    }
    public void off() {
        System.out.println("爆米花机关闭了...");
    }
    public void pop() {
        System.out.println("爆米花做好了...");
    }
}
public class Projector {
    private static final Projector instance = new Projector();
    private Projector(){}
    public static Projector getInstance() {
        return instance;
    }
    public void on() {
        System.out.println("投影仪打开了...");
    }
    public void off() {
        System.out.println("投影仪关闭了...");
    }
    public void focus() {
        System.out.println("投影仪聚焦中...");
    }
}
public class Screen {
    private static final Screen instance = new Screen();
    private Screen(){}
    public static Screen getInstance() {
        return instance;
    }
    public void up() {
        System.out.println("屏幕上升...");
    }
    public void down() {
        System.out.println("屏幕下降...");
    }
}
public class Stereo {
    private static final Stereo instance = new Stereo();
    private Stereo(){}
    public static Stereo getInstance() {
        return instance;
    }
    public void on() {
        System.out.println("立体音响打开...");
    }
    public void off() {
        System.out.println("立体音响关闭...");
    }
    public void up() {
        System.out.println("立体音响音量+...");
    }
    public void down() {
        System.out.println("立体音响音量-...");
    }
}
public class TheaterLight {
    private static final TheaterLight instance = new TheaterLight();
    private TheaterLight(){}
    public static TheaterLight getInstance() {
        return instance;
    }

    public void on() {
        System.out.println("灯光打开...");
    }
    public void off() {
        System.out.println("灯光关闭...");
    }
    public void dim() {
        System.out.println("灯光亮度调暗...");
    }
    public void bright() {
        System.out.println("灯光亮度调亮...");
    }
}
HomeTheaterFacade(各デバイスのスイッチを調整します)

public class HomeTheaterFacade {
    private DVDPlayer dvdPlayer;
    private Popcorn popcorn;
    private Projector projector;
    private Stereo stereo;
    private Screen screen;
    private TheaterLight theaterLight;
    public HomeTheaterFacade() {
        this.dvdPlayer = DVDPlayer.getInstance();
        this.popcorn = Popcorn.getInstance();
        this.projector = Projector.getInstance();
        this.stereo = Stereo.getInstance();
        this.screen = Screen.getInstance();
        this.theaterLight = TheaterLight.getInstance();
    }

    /**
     * 准备开始
     */
    public void ready() {
        popcorn.on();
        popcorn.pop();
        screen.down();
        projector.on();
        projector.focus();
        stereo.on();
        dvdPlayer.on();
        theaterLight.dim();
    }

    /**
     * 播放
     */
    public void play() {
        dvdPlayer.play();
    }

    /**
     * 暂停
     */
    public void pause() {
        dvdPlayer.pause();
    }

    /**
     * 结束
     */
    public void end() {
        popcorn.off();
        theaterLight.bright();
        screen.up();
        projector.off();
        stereo.off();
        dvdPlayer.off();
    }
}
クライアント(テスト)

public class Client {
    public static void main(String[] args) {
        HomeTheaterFacade homeTheaterFacade = new HomeTheaterFacade();
        System.out.println("----------准备开始-----------");
        homeTheaterFacade.ready();
        System.out.println("----------开始播放-----------");
        homeTheaterFacade.play();
        System.out.println("----------播放暂停-----------");
        homeTheaterFacade.pause();
        System.out.println("----------播放结束-----------");
        homeTheaterFacade.end();
    }
}
実装結果:

注意事項と外観モードの詳細Java デザイン パターン: 外観パターンの例の分析

外観モード
    サブシステムは外部から保護されます。詳細
  • したがって、外観モードにより、クライアントによるサブシステムの使用の複雑さが軽減されます。

    アピアランス モードには、クライアントとサブシステムの間にカップリング関係があります。つまり、デカップリングにより、サブシステムはシステムの内部モジュールの保守と拡張が容易になります。
  • 外観モードを合理的に使用することで、
  • アクセス レベルをより適切に分割することができます
  • システムで階層化された設計が必要な場合は、ファサード モードの使用を検討できます。
  • 大規模なレガシー システムを維持する場合、システムの維持と拡張が非常に困難になる可能性があります。現時点では、新しいシステムに機能を提供する Facade クラスを開発することを検討できます。比較的明確でシンプルなインターフェイスにより、新しいシステムは Facade クラスと対話できるようになり、再利用性が向上します。
  • アピアランス モードを過度に使用したり、無理に使用したりしないでください。アピアランス モードを使用するか、モジュールを直接呼び出すことをお勧めします。システムを階層化し、メンテナンスを容易にすることが目的です。

以上がJava デザイン パターン: 外観パターンの例の分析の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事はyisu.comで複製されています。侵害がある場合は、admin@php.cn までご連絡ください。