外观模式(Facade Pattern)是一种结构型设计模式,它提供了一个简化的接口,隐藏了系统的复杂性,使得客户端更容易使用系统。外观模式通过创建一个外观类,将系统中的一组接口进行封装,为客户端提供更高层次的接口。
下面是一个使用Java实现的外观模式的简单示例,假设有一个音响系统,包括音响、CD播放器和灯光控制:
// 子系统的一部分 - Amplifier(放大器)
class Amplifier {
void on() {
System.out.println("Amplifier is ON");
}
void off() {
System.out.println("Amplifier is OFF");
}
void setVolume(int volume) {
System.out.println("Setting volume to " + volume);
}
}
// 子系统的一部分 - CDPlayer
class CDPlayer {
void play() {
System.out.println("CD Player is playing");
}
void stop() {
System.out.println("CD Player stopped");
}
}
// 子系统的一部分 - Projector
class Projector {
void on() {
System.out.println("Projector is ON");
}
void off() {
System.out.println("Projector is OFF");
}
}
// 外观类 - HomeTheaterFacade
class HomeTheaterFacade {
private Amplifier amplifier;
private CDPlayer cdPlayer;
private Projector projector;
public HomeTheaterFacade(Amplifier amplifier, CDPlayer cdPlayer, Projector projector) {
this.amplifier = amplifier;
this.cdPlayer = cdPlayer;
this.projector = projector;
}
// 提供简化的接口,封装了启动家庭影院的步骤
void watchMovie() {
System.out.println("Get ready to watch a movie!");
amplifier.on();
cdPlayer.play();
projector.on();
}
// 提供简化的接口,封装了关闭家庭影院的步骤
void endMovie() {
System.out.println("Shutting down the home theater");
amplifier.off();
cdPlayer.stop();
projector.off();
}
// 提供简化的接口,封装了调整音量的步骤
void adjustVolume(int volume) {
System.out.println("Adjusting volume to " + volume);
amplifier.setVolume(volume);
}
}
// 客户端代码
public class Client {
public static void main(String[] args) {
// 创建子系统的实例
Amplifier amplifier = new Amplifier();
CDPlayer cdPlayer = new CDPlayer();
Projector projector = new Projector();
// 创建外观类的实例,将子系统的实例传入
HomeTheaterFacade homeTheater = new HomeTheaterFacade(amplifier, cdPlayer, projector);
// 使用外观类提供的简化接口
homeTheater.watchMovie();
homeTheater.adjustVolume(15);
homeTheater.endMovie();
}
}
在这个例子中,、AudioSystem和CDPlayer是LightControl子系统类,它们表示音响、CD播放器和灯光控制。HomeTheaterFacade是外观类,封装了子系统的操作,并提供了两种简化的接口方法:startMovieNight和endMovieNight。客户端代码通过实例化外观类来启动和结束电影夜,而无需直接调用子系统的复杂操作。
外观模式有助于降低系统的连接度,提高系统的可维护性和可扩展性。将子系统的复杂性隐藏在一个简单的接口背后,使得客户端更容易使用系统。
本文暂时没有评论,来添加一个吧(●'◡'●)