设计模式 10:外观模式
定义与目的
- 定义:外观模式(Facade Pattern)提供了一个统一的接口,用来访问子系统中的一群接口。它定义了一个高层接口,让子系统更容易使用。
- 目的:简化复杂的子系统的使用,并提供一个客户友好的接口,使得客户不必了解子系统的内部结构。
实现示例
假设我们有一个音乐播放器软件,它包含多个组件,比如播放、停止、上一首、下一首等功能。为了简化客户端代码,我们可以引入一个外观类来管理这些功能。
// 子系统接口
interface SubSystem {
void execute();
}
// 具体子系统 - 播放器
class Player implements SubSystem {
@Override
public void execute() {
System.out.println("Player is playing music.");
}
}
// 具体子系统 - 音量控制
class VolumeControl implements SubSystem {
@Override
public void execute() {
System.out.println("Volume is set to medium.");
}
}
// 具体子系统 - 显示器
class Display implements SubSystem {
@Override
public void execute() {
System.out.println("Display shows the current song.");
}
}
// 外观类
class MusicPlayerFacade {
private Player player;
private VolumeControl volumeControl;
private Display display;
public MusicPlayerFacade() {
player = new Player();
volumeControl = new VolumeControl();
display = new Display();
}
public void playMusic() {
player.execute();
volumeControl.execute();
display.execute();
}
}
// 客户端代码
public class Client {
public static void main(String[] args) {
MusicPlayerFacade facade = new MusicPlayerFacade();
facade.playMusic(); // 输出:
// Player is playing music.
// Volume is set to medium.
// Display shows the current song.
}
}
使用场景
- 当你需要提供一个简单易用的接口来访问复杂的子系统时。
- 当子系统有很多接口,但客户端只需要访问其中的一部分时。
- 当你需要隐藏子系统的复杂性并提供一个简单的界面时。
外观模式通过封装子系统中的复杂度,提供了一个简洁的接口供客户端使用,从而简化了客户端代码。
小结
外观模式是一种常用的结构型模式,它有助于简化子系统的使用,使得客户端不必关心子系统的具体细节,从而降低了系统的耦合度。这对于提高系统的可维护性和可扩展性非常有益。