java 实现外观模式

外观模式(Facade Pattern)是一种结构型设计模式,它提供了一个简化的接口,用于访问一组相关的接口或子系统。外观模式的主要目的是隐藏复杂的系统结构,提供一个更简单的接口供客户端使用。以下是一个简单的Java示例,演示如何实现外观模式:

首先,假设我们有一个音响系统,它包含了多个子系统,如音响、DVD播放器和投影仪。每个子系统都有自己的方法和状态。

java 复制代码
// 子系统1:音响
public class StereoSystem {
    public void turnOn() {
        System.out.println("Stereo System is ON");
    }

    public void turnOff() {
        System.out.println("Stereo System is OFF");
    }
}

// 子系统2:DVD播放器
public class DVDPlayer {
    public void play() {
        System.out.println("DVD Player is playing");
    }

    public void stop() {
        System.out.println("DVD Player is stopped");
    }
}

// 子系统3:投影仪
public class Projector {
    public void turnOn() {
        System.out.println("Projector is ON");
    }

    public void turnOff() {
        System.out.println("Projector is OFF");
    }
}

接下来,我们创建一个外观类 HomeTheaterFacade,它提供了一个简单的接口,封装了所有子系统的操作:

java 复制代码
public class HomeTheaterFacade {
    private StereoSystem stereoSystem;
    private DVDPlayer dvdPlayer;
    private Projector projector;

    public HomeTheaterFacade() {
        this.stereoSystem = new StereoSystem();
        this.dvdPlayer = new DVDPlayer();
        this.projector = new Projector();
    }

    public void watchMovie() {
        System.out.println("Get ready to watch a movie...");
        stereoSystem.turnOn();
        dvdPlayer.play();
        projector.turnOn();
    }

    public void endMovie() {
        System.out.println("Movie is over. Shutting down...");
        projector.turnOff();
        dvdPlayer.stop();
        stereoSystem.turnOff();
    }
}

现在,客户端可以通过使用 HomeTheaterFacade 来操作整个家庭影院系统,而无需了解每个子系统的细节:

java 复制代码
public class FacadePatternDemo {
    public static void main(String[] args) {
        HomeTheaterFacade homeTheater = new HomeTheaterFacade();

        // 开始观影
        homeTheater.watchMovie();

        // 结束观影
        homeTheater.endMovie();
    }
}

使用外观模式,客户端代码变得更简单,因为它不必了解复杂的子系统结构和操作。外观模式提供了一个更高级别的接口,使得系统更易于使用和维护。

相关推荐
程序员游老板3 分钟前
基于SpringBoot3+vue3的爱心陪诊平台
java·spring boot·毕业设计·软件工程·课程设计·信息与通信
期待のcode5 分钟前
Springboot核心构建插件
java·spring boot·后端
遥不可及~~斌8 分钟前
Java 面试题集 -- 001
java·开发语言
2501_9216494910 分钟前
如何获取美股实时行情:Python 量化交易指南
开发语言·后端·python·websocket·金融
C1829818257536 分钟前
HttpURLConnection 与其他客户端关系
java
集智飞行1 小时前
c++函数传参的几种推荐方式
开发语言·c++
通往曙光的路上1 小时前
发邮件1、创建邮箱
java
鼾声鼾语1 小时前
matlab的ros2发布的消息,局域网内其他设备收不到情况吗?但是matlab可以订阅其他局域网的ros2发布的消息(问题总结)
开发语言·人工智能·深度学习·算法·matlab·isaaclab
麦麦鸡腿堡2 小时前
Java_类的加载
java·开发语言
我命由我123452 小时前
VSCode - Prettier 配置格式化的单行长度
开发语言·前端·ide·vscode·前端框架·编辑器·学习方法