23种设计模式(12):外观模式(Facade Pattern)

资料摘自《Head First设计模式》

外观模式提供一个简化的接口使得子系统更易于使用。


生活范例:组建自己的家庭影院
通过一番研究,你组装了一套杀手级的系统,内含DVD播放器、投影机、自动屏幕、环绕立体声,甚至还有爆米花机。
你花了好几个星期布线、挂上投影机、连接所有的装置并进行微调。现在,你准备开始享受一部电影.....
挑选一部DVD影片,放松,准备开始感受电影的魔幻魅力。
哎呀!忘了一件事:想看电影,必须先执行一些任务:
1.打开爆米花机
2.开始爆米花
3.将灯光调暗
4.放下屏幕
5.打开投影机
6.将投影机的输入切换到DVD
7.将投影机设置在宽屏模式
8.打开功放
9.将功放的输入设置为DVD
10.将功放设置为环绕立体声
11.将苏州音量调到中(5)
12.打开DVD播放器
13.开始播放DVD
还不只这样....
看完电影后,你还要把一切关掉,怎么办?难道要反向地把这一切动作再进行一次?
怎么办?使用你的家庭影院变得如此复杂!让我们看看外观模式如何解决这团混乱,好让你轻易地享受电影.....
1.为家庭影院系统创建一个外观类HomeTheaterFacade,它对外暴露出几个简单的方法,例如watchMovie()
2.这个外观类将家庭影院的诸多组件视为一个子系统,通过调用这个子系统来实现watchMovie()
3.现在你的客户代码可以调用此家庭影院外观所提供的方法,而不必再调用这个子系统的方法。所以,想要看电影,我们只要调用watchMovie()就可以了。灯光、DVD播放器、投影机、功放、屏幕、爆米花,一口气全部搞定
4.外观只是提供你更直接的操作,并未将原来的子系统阻隔起来。如果你需要子系统类的更高层功能,还是可以使用原来的子系统
public class HomeTheaterFacade{
//所有子系统组件
Amplifier amp;
Tuner tuner;
DvdPlayer dvd;
CdPlayer cd;
Projector projector;
TheaterLights lights;
Screen screen;
PopcornPopper popper;
public HomeTheaterFacade(Amplifier amp,Tuner tuner,DvdPlayer dvd,CdPlayer cd,Projector projector,TheaterLights lights,Screen screen,PopcornPopper popper){
  this.amp = amp;
  this.tunner = tuner;
  this.dvd = dvd;
  this.cd = cd;
  this.projector = projector;
  this.screen = screen;
  this.lights = lights;
  this.popper = popper;
}
public void watchMovie(String movie){
  System.out.println("Get ready to watch a movie...");
  //播放电影的一系列操作
  popper.on();
  popper.pop();
  lights.dim(10);
  ......
  dvd.play(movie);
}
public void endMovie(){
  System.out.println("Shutting movie theater down...");
  //结尾电影的一系列操作
  popper.off();
  lights.on();
  ......
  dvd.off();
}
}
public class HomeTheaterTestDrive{
public static void main(String [] args){
  //首先实例化组件
  ......
  //接着
  HomeTheaterFacade homeTheater = new HomeTheaterFacade(amp,tuner,dvd,cd,projector,screen,lights,popper);
  homeTheater.watchMovie("Raiders of the Lost Ark"); //使用简化的接口开启电影
  homeTheater.endMovie(); //使用简化的接口关闭电影
}
}

定义:外观模式提供了一个统一的接口,用来访问子系统中的一群接口。外观定义了一个高层接口,让子系统更容易使用。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值