外观模式(Facade Pattern)是一种结构型设计模式,它提供了一个简化的接口,用于访问一组相关的接口或子系统。外观模式的主要目的是隐藏复杂的系统结构,提供一个更简单的接口供客户端使用。以下是一个简单的Java示例,演示如何实现外观模式:
首先,假设我们有一个音响系统,它包含了多个子系统,如音响、DVD播放器和投影仪。每个子系统都有自己的方法和状态。
// 子系统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
,它提供了一个简单的接口,封装了所有子系统的操作:
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
来操作整个家庭影院系统,而无需了解每个子系统的细节:
public class FacadePatternDemo {
public static void main(String[] args) {
HomeTheaterFacade homeTheater = new HomeTheaterFacade();
// 开始观影
homeTheater.watchMovie();
// 结束观影
homeTheater.endMovie();
}
}
使用外观模式,客户端代码变得更简单,因为它不必了解复杂的子系统结构和操作。外观模式提供了一个更高级别的接口,使得系统更易于使用和维护。