12、外观模式
**外观模式:**又叫门面模式,提供一个统一的接口,用来访问子系统中的一群接口。
问题提出:系统常常划分为若干个子系统,但是如何做到各个系统之间的通信和相互依赖关系达到最小呢?
外观模式为子系统中的一组接口提供一个一致的界面, 外观模式定义了一个高层接口,这个接口使得这一子系统更加容易使用。引入外观角色之后,用户只需要直接与外观角色交互,用户与子系统之间的复杂关系由外观角色来实现,从而降低了系统的耦合度。通过子系统的互相组合,可以产生多个外观类。
例子:一个电源总开关可以控制四盏灯、一个风扇、一台空调和一台电视机的启动和关闭。该电源总开关可以同时控制上述所有电器设备,电源总开关即为该系统的外观模式设计。
UML类图:
代码示例:
//电源开关,外观类
public class PowerSwitch {
private static Fan fan = new Fan(); //风扇
private static Light light = new Light(); //灯
private static AirConditioner airConditioner = new AirConditioner(); //空调
public static void on(){
light.light();
fan.on();
airConditioner.on();
}
public static void off(){
light.dark();
fan.off();
airConditioner.off();
}
}
//灯,子系统类
public class Light {
public void light(){
System.out.println("灯开了");
}
public void dark(){
System.out.println("灯关了");
}
}
//风扇,子系统类
public class Fan {
public void on(){
System.out.println("风扇开了");
}
public void off(){
System.out.println("风扇关了");
}
}
//空调类,子系统类
public class AirConditioner {
public void on(){
System.out.println("空调开了");
}
public void off(){
System.out.println("空调关了");
}
}
public class Test78 {
public static void main(String[] args) {
PowerSwitch.on();
PowerSwitch.off();
}
}