私の連絡先情報
郵便メール:
2024-07-12
한어Русский языкEnglishFrançaisIndonesianSanskrit日本語DeutschPortuguêsΕλληνικάespañolItalianoSuomalainenLatina
ファサード デザイン パターン (外観パターンとも呼ばれます) は、主にサブシステム内の一連のインターフェイスに統一された高レベル インターフェイスを提供し、サブシステムを使いやすくするために使用されます。以下は、ファサード デザイン パターンの詳細な紹介です。
ファサード パターンは、複数の複雑なサブシステムに外部インターフェイスを提供し、これらのサブシステムへのアクセスを容易にします。このモードには外部への統一インターフェイスがあり、外部アプリケーションはサブシステムの内部の詳細を気にする必要がないため、アプリケーションの複雑さが大幅に軽減され、保守性が向上します。
クラス図:
ファサードモードには主に次の 3 つの役割があります。
ホームシアターシステムでは、ファサードモードを利用することでユーザーの操作を簡素化できます。たとえば、ユーザーは 1 つのリモコン (Facade クラス) を使用するだけで、プロジェクター、スピーカー、DVD プレーヤー、その他のデバイス (サブシステム) を個別に操作することなく制御できます。
- // 投影仪接口
- interface Projector {
- void on();
- void off();
- void focus();
- void wideScreenMode();
- }
-
- // 投影仪实现类
- class SimpleProjector implements Projector {
- @Override
- public void on() {
- System.out.println("Projector is on");
- }
-
- @Override
- public void off() {
- System.out.println("Projector is off");
- }
-
- @Override
- public void focus() {
- System.out.println("Adjusting projector focus");
- }
-
- @Override
- public void wideScreenMode() {
- System.out.println("Switching to wide screen mode");
- }
- }
-
- // DVD播放器接口
- interface DVDPlayer {
- void on();
- void off();
- void play();
- void stop();
- void pause();
- void eject();
- void setTwoChannelAudio();
- void setSurroundAudio();
- }
-
- // DVD播放器实现类
- class SimpleDVDPlayer implements DVDPlayer {
- @Override
- public void on() {
- System.out.println("DVD Player is on");
- }
-
- @Override
- public void off() {
- System.out.println("DVD Player is off");
- }
-
- @Override
- public void play() {
- System.out.println("DVD Player is playing");
- }
-
- @Override
- public void stop() {
- System.out.println("DVD Player stopped");
- }
-
- @Override
- public void pause() {
- System.out.println("DVD Player paused");
- }
-
- @Override
- public void eject() {
- System.out.println("DVD ejected");
- }
-
- @Override
- public void setTwoChannelAudio() {
- System.out.println("Stereo mode is on");
- }
-
- @Override
- public void setSurroundAudio() {
- System.out.println("Surround sound mode is on");
- }
- }
-
- // 音响接口
- interface Amplifier {
- void on();
- void off();
- void setStereoSound();
- void setSurroundSound();
- void setVolume(int volume);
- }
-
- // 音响实现类
- class StereoAmplifier implements Amplifier {
- @Override
- public void on() {
- System.out.println("Amplifier is on");
- }
-
- @Override
- public void off() {
- System.out.println("Amplifier is off");
- }
-
- @Override
- public void setStereoSound() {
- System.out.println("Stereo mode is on");
- }
-
- @Override
- public void setSurroundSound() {
- System.out.println("Surround sound mode is on");
- }
-
- @Override
- public void setVolume(int volume) {
- System.out.println("Setting volume to " + volume);
- }
- }
-
- // 家庭影院Facade类
- class HomeTheaterFacade {
- private Projector projector;
- private DVDPlayer dvdPlayer;
- private Amplifier amplifier;
-
- public HomeTheaterFacade(Projector projector, DVDPlayer dvdPlayer, Amplifier amplifier) {
- this.projector = projector;
- this.dvdPlayer = dvdPlayer;
- this.amplifier = amplifier;
- }
-
- // 提供一个简单的方法来观看电影
- public void watchMovie(String movie) {
- System.out.println("Get ready to watch a movie...");
-
- projector.on();
- projector.wideScreenMode();
-
- amplifier.on();
- amplifier.setSurroundSound();
- amplifier.setVolume(5);
-
- dvdPlayer.on();
- dvdPlayer.play(movie);
-
- System.out.println("Enjoy the movie...");
- }
-
- // 提供一个简单的方法来结束观看
- public void endMovie() {
- System.out.println("Shutting movie theater down...");
-
- projector.off();
- amplifier.off();
- dvdPlayer.stop();
- dvdPlayer.eject();
- dvdPlayer.off();
- }
- }
-
- class Client{
- public static void main(String[] args) {
- Projector projector = new SimpleProjector();
- DVDPlayer dvdPlayer = new SimpleDVDPlayer();
- Amplifier amplifier = new StereoAmplifier();
- HomeTheaterFacade homeTheaterFacade = new HomeTheaterFacade(projector,dvdPlayer,amplifier);
- homeTheaterFacade.watchMovie("肖申克的救赎");
- homeTheaterFacade.endMovie();
- }
- }
この例では、ファサード モードがわかります。これは、複数のコンポーネントを使用して固定プロセスを組み立て、クライアント呼び出しの複雑さを軽減するのに特に適しています。
ファサード デザイン パターンは、サブシステムに統一されたインターフェイスを提供することで、システムの複雑さを軽減し、システムの使いやすさと柔軟性を向上させる、非常に実用的なデザイン パターンです。ただし、このモデルを使用する場合は、考えられる欠点やリスクにも注意する必要があります。
このモードが役立つ場合は、忘れずに「いいね」を押して収集してください。