外观模式(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();}
}
使用外观模式,客户端代码变得更简单,因为它不必了解复杂的子系统结构和操作。外观模式提供了一个更高级别的接口,使得系统更易于使用和维护。