Facade(外观模式)

Facade” 是设计模式中的一种结构型模式,中文名为“外观模式”,主要目的是为复杂子系统提供一个统一的接口,让外部调用者无需了解系统内部的复杂结构和细节,就能方便地使用系统功能。


🧱 Facade 模式的核心思想:

“让外部系统与一个复杂子系统交互时,只通过一个简单的接口。”


✅ 应用场景

  • 一个系统有多个复杂子系统或类,调用顺序繁琐;
  • 客户端希望使用一套简单的 API 来完成一个任务;
  • 需要对外屏蔽子系统的实现细节,降低耦合性。

🧩 示例(Java)

假设你有一个家庭影院系统,有多个子系统:DVD 播放器、音响、投影仪、灯光等。启动影院非常麻烦,客户端需要按顺序调用多个类的方法。

🧱 子系统类:

class DVDPlayer {
    void on() { System.out.println("DVD 打开"); }
    void play() { System.out.println("DVD 播放"); }
}

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

class Light {
    void dim() { System.out.println("灯光调暗"); }
}


🎯 Facade 类:

public class HomeTheaterFacade {
    private DVDPlayer dvd;
    private Projector projector;
    private Light light;

    public HomeTheaterFacade(DVDPlayer dvd, Projector projector, Light light) {
        this.dvd = dvd;
        this.projector = projector;
        this.light = light;
    }

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


🚀 客户端调用:

public class Client {
    public static void main(String[] args) {
        HomeTheaterFacade theater = new HomeTheaterFacade(
            new DVDPlayer(),
            new Projector(),
            new Light()
        );

        theater.watchMovie();
    }
}


🎯 优点

  • 简化接口,屏蔽子系统复杂性;
  • 降低系统之间的耦合;
  • 增强代码可读性和可维护性。

⚠️ 注意

  • Facade 模式并不会限制你直接访问子系统类;
  • 如果子系统本身频繁变动,Facade 类可能也需要频繁调整。

如果你是用在 Spring Boot、微服务等场景中,Facade 也常用作对外接口的“统一封装服务层”,比如接口网关、统一服务聚合层。

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注