23种设计模式-结构型模式之外观模式(Java版本)

Java 外观模式(Facade Pattern)详解

🧭 什么是外观模式?

外观模式是结构型设计模式之一,为子系统中的一组接口提供一个统一的高层接口,使得子系统更易使用

就像是酒店前台,帮你处理入住、叫车、订餐等各种服务,让你不用和多个部门打交道。


🧠 使用场景

  • 简化复杂系统的操作流程
  • 封装子系统,提高代码可维护性
  • 为旧系统提供统一的接口

🏗️ 模式结构

  • Facade(外观类):对外提供统一接口,封装子系统
  • Subsystem(子系统类):各个独立的模块或类,完成实际业务

✅ 示例:家庭影院系统

子系统类

java 复制代码
public class DVDPlayer {
    public void on() { System.out.println("DVD 播放器打开"); }
    public void play() { System.out.println("DVD 播放电影"); }
    public void off() { System.out.println("DVD 播放器关闭"); }
}

public class Projector {
    public void on() { System.out.println("投影仪打开"); }
    public void off() { System.out.println("投影仪关闭"); }
}

public class Screen {
    public void down() { System.out.println("幕布放下"); }
    public void up() { System.out.println("幕布收起"); }
}

外观类

java 复制代码
public class HomeTheaterFacade {
    private DVDPlayer dvd;
    private Projector projector;
    private Screen screen;

    public HomeTheaterFacade() {
        dvd = new DVDPlayer();
        projector = new Projector();
        screen = new Screen();
    }

    public void watchMovie() {
        System.out.println("准备观看电影...");
        screen.down();
        projector.on();
        dvd.on();
        dvd.play();
    }

    public void endMovie() {
        System.out.println("电影结束,关闭设备...");
        dvd.off();
        projector.off();
        screen.up();
    }
}

客户端调用

java 复制代码
public class Main {
    public static void main(String[] args) {
        HomeTheaterFacade home = new HomeTheaterFacade();
        home.watchMovie();
        home.endMovie();
    }
}

🧩 优点

  • 简化客户端使用,提高系统易用性
  • 松散耦合,降低子系统之间依赖
  • 更好地组织代码结构

⚠️ 缺点

  • 增加额外的外观类
  • 可能造成"上帝类"问题(职责过重)

✅ 使用建议

适用于:

  • 系统复杂度高、子系统繁多的情况
  • 为旧系统封装一层适配接口
  • 需要定义入口统一调用多个类的场景
相关推荐
q567315231 分钟前
Java Selenium反爬虫技术方案
java·爬虫·selenium
张小洛4 分钟前
Spring IOC容器核心阶段解密:★Bean实例化全流程深度剖析★
java·后端·spring·ioc容器·bean实例化
不良手残13 分钟前
IDEA类和方法注释模板设置-保姆教程
java·开发语言
GoodStudyAndDayDayUp19 分钟前
调用海康API预览视频
java·海康
李迟24 分钟前
在Linux服务器上使用kvm创建虚拟机
java·linux·服务器
Dcs24 分钟前
6 个 PWA 高阶策略,助你提升用户留存与参与度
java
hdsoft_huge29 分钟前
Spring Boot 高并发框架实现方案:数字城市的奇妙之旅
java·spring boot·后端
项目題供诗30 分钟前
黑马python(二十四)
开发语言·python
就改了1 小时前
JUC小册——公平锁和非公平锁
java·开发语言
ThetaarSofVenice1 小时前
垃圾收集相关算法Test
java·jvm·算法