概念:
- ①:外观模式(
Facade),也叫(门面模式):为子系统中的一组接口,提供一个一致的界面。此模式定义了一个高层接口,这个接口使得这一子系统更加容易使用。 - ②:外观模式提供的高层接口,用以屏蔽内部子系统的细节,使得调用端只需要跟这个接口发生调用,而无需关心这个子系统的内部细节,简化操作流程。
- ③:外观模式提供的高层接口,知道那些子系统负责处理什么请求,从而将调用端的请求代理给适当子系统对象。
- ④:各个不同的子系统模块,它们是功能的提供者,处理高层接口对象指派的任务。

电影播放器设备,具有 开、关、播放、暂停的功能
/*电影播放器*/public class MoviePlayer {private static final MoviePlayer INSTANCE = new MoviePlayer();private MoviePlayer() {}public static MoviePlayer getInstance() {return INSTANCE;}public void on() {System.out.println("打开MoviePlayer……");}public void off() {System.out.println("关闭MoviePlayer……");}public void pause() {System.out.println("`MoviePlayer`,暂停电影播放……");}public void play() {System.out.println("`MoviePlayer`,播放电影中……");}}
投影仪设备,具有 开、关、播放的功能
/*投影仪*/public class Projector {private static final Projector INSTANCE = new Projector();private Projector() {}public static Projector getInstance() {return INSTANCE;}public void on() {System.out.println("打开投影仪幕布……");}public void off() {System.out.println("关闭投影仪幕布……");}public void play() {System.out.println("连接到`MoviePlayer`,播放画面……");}}
投影仪幕布设备,具有 开、关 的功能
/*投影仪幕布*/public class Screen {private static final Screen INSTANCE = new Screen();private Screen() {}public static Screen getInstance() {return INSTANCE;}public void on() {System.out.println("打开投影仪幕布……");}public void off() {System.out.println("关闭投影仪幕布……");}}
立体声音箱设备,具有 开、关、播放、声音高低 的功能
/*立体声音箱*/public class Stereo {private static final Stereo INSTANCE = new Stereo();private Stereo() {}public static Stereo getInstance() {return INSTANCE;}public void on() {System.out.println("打开音响……");}public void off() {System.out.println("关闭音响……");}public void volumeUp() {System.out.println("音响声音提高……");}public void volumeDown() {System.out.println("音响声音降低……");}public void play() {System.out.println("连接到`MoviePlayer`,播放声音……");}}
灯光设备,具有 开、关 的功能
/*灯光*/public class Light {private static final Light INSTANCE = new Light();private Light() {}public static Light getInstance() {return INSTANCE;}public void on() {System.out.println("打开灯光……");}public void off() {System.out.println("关闭灯光……");}}
提供一个HomeTheatre(家庭影院)的高层接口,用以屏蔽内部子系统的细节,使得调用端只需要跟这个接口发生调用,而无需关心这个子系统的内部细节,简化操作流程。
/*家庭影院*/public class HomeTheatre {private MoviePlayer moviePlayer;private Projector projector;private Screen screen;private Stereo stereo;private Light light;public HomeTheatre() {this.moviePlayer = MoviePlayer.getInstance();this.projector = Projector.getInstance();this.screen = Screen.getInstance();this.stereo = Stereo.getInstance();this.light = Light.getInstance();}public void on() {moviePlayer.on();projector.on();screen.on();stereo.on();light.on();}public void off() {moviePlayer.off();projector.off();screen.off();stereo.off();light.off();}public void pause() {moviePlayer.pause();}public void play() {moviePlayer.play();projector.play();stereo.play();}public void volumeUp() {stereo.volumeUp();}public void volumeDown() {stereo.volumeDown();}}
用户通过遥控器来操控,家庭影院的 开、关、播放、声音高低、暂停 等等。
/*遥控器操控*/public class RemoteControl {public static void main(String[] args) {HomeTheatre homeTheatre = new HomeTheatre();homeTheatre.on();homeTheatre.play();homeTheatre.volumeUp();homeTheatre.volumeDown();homeTheatre.pause();homeTheatre.off();}}
内容输出:
打开MoviePlayer……打开投影仪幕布……打开投影仪幕布……打开音响……打开灯光……`MoviePlayer`,播放电影中……连接到`MoviePlayer`,播放画面……连接到`MoviePlayer`,播放声音……音响声音提高……音响声音降低……`MoviePlayer`,暂停电影播放……关闭MoviePlayer……关闭投影仪幕布……关闭投影仪幕布……关闭音响……关闭灯光……
