我们每天上班回到家的时候都会做一系列的动作,像打开灯、打开电视和打开音响,用代码描述就如下一样。
public class Light { public void on() { System.out.println("打开了灯!"); } public void off() { System.out.println("关闭了灯!"); } }
public class Redio { public void on() { System.out.println("打开了音箱!"); } public void off() { System.out.println("关闭了音箱!"); } }
public class TV { public void on() { System.out.println("打开了电视!"); } public void off() { System.out.println("关闭了电视!"); } }
测试代码
public static void main(String[] args) { Light light = new Light(); Redio redio = new Redio(); TV tv = new TV(); System.out.println("回到了家"); light.on(); redio.on(); tv.on(); System.out.println("要离开家了"); light.off(); redio.off(); tv.off(); }
测试结果
我们发现,回到家需要打开这么多东西,这对于上班回来疲惫的我们实在是太过于煎熬了,那能不能一下子就把所有的动作都执行了呢?方法是有的,就是使用外观模式,我们只需要执行回家这个动作,就能实现这一系列的动作,做一个总和的操作。
添加的代码如下
public class HomeAction { private Light light; private TV tv; private Redio redio; public HomeAction(Light light, TV tv, Redio redio) { this.light = light; this.tv = tv; this.redio = redio; } public void getHome() { light.on(); tv.on(); redio.on(); } public void leaveHome() { light.off(); tv.off(); redio.off(); } }
测试代码
public static void main(String[] args) { Light light = new Light(); Redio redio = new Redio(); TV tv = new TV(); HomeAction homeAction = new HomeAction(light, tv, redio); System.out.println("回到了家"); homeAction.getHome(); System.out.println("要离开家了"); homeAction.leaveHome(); }
测试结果
外观模式提供了一个统一的接口,用来访问子系统中的一群接口。外观模式定义一个高层的接口,让子系统更容易使用。
外观模式并不是用来给接口添加新的功能,它是用减少外部和子系统的交互,松散耦合,从而让外部能够更简单地使用子系统。