文章目录
一、什么是外观模式
外观模式(Facade Pattern)是一种结构型设计模式,它提供了一个统一的接口,用来访问系统中的一群接口,从而简化客户端与系统之间的交互。外观模式通过引入一个外观类来封装子系统的复杂性,使得客户端只需要与外观类交互,而无需直接与子系统的各个组件打交道。
在外观模式中,外观类充当了客户端与子系统之间的中介者,隐藏了子系统的复杂性,为客户端提供了一个更简单和统一的接口。客户端通过外观类来访问系统的功能,而不需要了解系统内部各个组件之间的关系和调用方式。
二、外观模式结构
1、外观模式的主要角色包括:
- 外观类(Facade):对客户端提供简单接口的类,负责将客户端的请求转发给子系统中相应的对象处理。
- 子系统(Subsystems):由多个组件或类组成的复杂系统,外观类封装了这些组件的功能。
2、外观模式通常适用于以下情况:
- 当系统中存在复杂的子系统,需要提供一个简单统一的接口给客户端使用时。
- 当需要将系统的各个组件解耦,减少它们之间的依赖关系时。
简单的示例:
cpp
// 子系统组件
class MusicPlayer {
public void play() {
System.out.println("Playing music");
}
}
class Amplifier {
public void on() {
System.out.println("Amplifier on");
}
public void off() {
System.out.println("Amplifier off");
}
}
class Speaker {
public void open() {
System.out.println("Speaker open");
}
public void close() {
System.out.println("Speaker close");
}
}
// 外观类
class AudioFacade {
private MusicPlayer musicPlayer;
private Amplifier amplifier;
private Speaker speaker;
public AudioFacade() {
this.musicPlayer = new MusicPlayer();
this.amplifier = new Amplifier();
this.speaker = new Speaker();
}
public void startMusic() {
amplifier.on();
speaker.open();
musicPlayer.play();
}
public void stopMusic() {
musicPlayer.stop();
speaker.close();
amplifier.off();
}
}
// 客户端代码
public class Main {
public static void main(String[] args) {
AudioFacade audioFacade = new AudioFacade();
audioFacade.startMusic();
}
}
三、优点
外观模式的优点包括:
- 简化接口:客户端只需与外观类交互,无需了解系统的复杂性。
- 解耦客户端和子系统:外观类作为中介者,降低了客户端和子系统之间的耦合度。
- 提高灵活性:可以随时修改外观类以适应系统变化,而不会影响客户端代码。