外观模式
定义
外观模式是迪米特法则思想实现的经典模式之一,又名门面模式,是一种为多个复杂的子系统提供统一的接口,从而让使用这些子系统客户更加容易访问,该模式对外有一个统一的接口,外部人员不用关心内部子系统具体实现细节与用法,这样大大降低了使用子系统的复杂程度,提高可维护性。
理解
比如你要投资基金,但是你对股票、期权、债券等(子系统)都不理解,这时你需要一个懂行的人来帮助你投资,这个人是基金经理(外观角色),你不需要知道具体怎么去投资,只要把资金给经理即可。
角色
- 外观角色:为多个子系统提供统一的外观角色
- 子系统角色:实现系统的各个部分功能,可以通过外观角色来访问它
案例
小明爷爷年纪大了,老人家每天都要开灯、开电视机、关灯、关电视机…等,于是小明给爷爷买了个智能音箱,爷爷只要对音箱说开电视、开灯、关电视、关灯…等即可
案例实现
1。子系统角色
//电视机
public class TV {
public void on() {
System.out.println("打开电视机");
}
public void off() {
System.out.println("关闭电视机");
}
}
//灯
public class Light {
public void on() {
System.out.println("开灯");
}
public void off() {
System.out.println("关灯");
}
}
2.外观角色
public class SmartFacade {
private Light light;
private TV tv;
public SmartFacade(Light light, TV tv) {
this.light = light;
this.tv = tv;
}
public void sayOn() {
light.on();
tv.on();
}
public void sayOff() {
light.off();
tv.off();
}
}
3.测试类
public class ClientTest {
public static void main(String[] args) {
SmartFacade smartFacade = new SmartFacade(new Light(), new TV());
smartFacade.sayOn();//开灯 '/n' 打开电视机
smartFacade.sayOff();//关灯 '/n' 关闭电视机
}
}