外观模式
概述
在大多数情况下,网站都会提供一个网站首页作为入口,提供通往各个子栏目的超链接。用户只需记住网站首页网站 URL,而无须记住每个子栏目的网址
同理,用户与系统的交互可以通过一个外观对象进行,提供实现各种功能的子系统接口
模式实例
一个电源总开关可以控制四盏灯、一个风扇、一台空调和一台电视机的启动和关闭,使用外观模式设计该系统
子系统类 Light
public class Light {
private String position;
public Light(String position) {
this.position = position;
}
public void on() {
System.out.println(this.position + "灯打开");
}
public void off() {
System.out.println(this.position + "灯打开");
}
}
子系统类 Fan
public class Fan {
public void on() {
System.out.println("风扇打开");
}
public void off() {
System.out.println("风扇关闭");
}
}
子系统类 AirConditioner
public class AirConditioner {
public void on() {
System.out.println("空调打开");
}
public void off() {
System.out.println("空调关闭");
}
}
子系统类 Televison
public class Television {
public void on() {
System.out.println("电视机打开");
}
public void off() {
System.out.println("电视机关闭");
}
}
外观类 GeneralSwitchFacade
public class GeneralSwitchFacade {
private Light[] lights = new Light[4];
private Fan fan;
private AirConditioner ac;
private Television tv;
public GeneralSwitchFacade() {
lights[0] = new Light("左前");
lights[1] = new Light("右前");
lights[2] = new Light("左后");
lights[3] = new Light("右后");
fan = new Fan();
ac = new AirConditioner();
tv = new Television();
}
public void on() {
lights[0].on();
lights[1].on();
lights[2].on();
lights[3].on();
fan.on();
ac.on();
tv.on();
}
public void off() {
lights[0].off();
lights[1].off();
lights[2].off();
lights[3].off();
fan.off();
ac.off();
tv.off();
}
public void fanOn() {
fan.on();
}
...
}